home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 2 / Amiga Tools 2.iso / tools / packer / apppp / apppp.s < prev    next >
Text File  |  1995-03-09  |  101KB  |  3,559 lines

  1.  
  2. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  3. *                                    *
  4. *                                    *
  5. *             * * * *                        *
  6. *            *      *                        *
  7. *           *     *   _________________________________________    *
  8. *          *     *   /                         /    *
  9. *         *     *   /  Code Source Assembleur de AppPP v1.0  /    *
  10. *         *     *   /                       /    *
  11. *  * * * *     *     *   /  Assembly Source Code of  AppPP v1.0   /    *
  12. *   *     *   *     *    /                     /    *
  13. *    *     * *     *   /         - by BURNAND Patrick -        /    *
  14. *     *     *      *   /                           /    *
  15. *      *     *    ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯        *
  16. *    * * * * *                            *
  17. *                                    *
  18. *                                    *
  19. *                                    *
  20. *   Ce code source est distribué avec le package AppPP et ne doit pas    *
  21. *   être distribué autrement.  Il doit toujours être maintenu dans sa    *
  22. *   forme originale et non-modifiée. Ce fichier est distribué pour l'    *
  23. *   apprentisage et comme example seulement. Vous avez l'autorisation    *
  24. *   d'imprimer  ce  fichier,  mais  vous  n'avez  pas  le droit de le    *
  25. *   distribuer  sous forme d'imprimé.   Si vous voulez faire d'autres    *
  26. *   usages  de ce code source,  contacter l'auteur.    Mon adresse se    *
  27. *   trouve dans la doc de ce programme.                    *
  28. *                                    *
  29. *                                    *
  30. *   This  source  code  is distributed with the AppPP package and may    *
  31. *   not be distrbuted by another way.    It  must  always  be kept in    *
  32. *   original and unmodifed form.   This file is distributed for lear-    *
  33. *   ning purposes and as example only.  You are allowed to print this    *
  34. *   file but you aren't allowed to distribute it in printed form.  If    *
  35. *   you     want  to  make others uses of this source code,  contact the    *
  36. *   author.  My adress can be found in the doc file of this program.    *
  37. *                                    *
  38. *                                    *
  39. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  40.  
  41.  
  42.  
  43. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  44. *   Définition des constantes.  (Ne prend pas de place dans le code)  * *
  45. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  46.  
  47. ExecBase               =          4
  48.  
  49. OpenScreenTagList      =       -612
  50. OpenWindowTagList      =       -606
  51. CloseScreen            =        -66
  52. CloseWindow            =        -72
  53. PrintIText             =       -216
  54. LockPubScreen          =       -510
  55. UnlockPubScreen        =       -516
  56. SetMenuStrip           =       -264
  57. ClearMenuStrip         =        -54
  58. EasyRequestArgs        =     -$024c
  59. GetVisualInfoA         =       -126
  60. FreeVisualInfo         =       -132
  61. CreateContext          =       -114
  62. CreateGadgetA          =        -30
  63. GT_RefreshWindow       =        -84
  64. FreeGadgets            =        -36
  65. CreateMenusA           =        -48
  66. LayoutMenusA           =        -66
  67. FreeMenus              =        -54
  68. OpenDiskFont           =        -30
  69. CloseFont              =        -78
  70. DrawBevelBoxA          =       -120
  71. FreeClass              =       -714
  72. NewObjectA             =       -636
  73. DisposeObject          =       -642
  74. TextLength             =        -54
  75. CopyMem                =       -624
  76. FindTagItem            =        -30
  77. IntuiTextLength        =       -330
  78. FindTask               =     -$0126
  79. Forbid                 =       -132
  80. Permit                 =       -138
  81. OpenLibrary            =       -552
  82. CloseLibrary           =       -414
  83.  
  84. AllocFileRequest       =     -$001e
  85. FreeFileRequest        =     -$0024
  86. RequestFile            =     -$002a
  87. AllocAslRequest        =     -$0030
  88. FreeAslRequest         =     -$0036
  89. AslRequest             =     -$003c
  90. WaitPort               =     -$0180
  91. GT_GetIMsg             =     -$0048
  92. GT_ReplyIMsg           =     -$004e
  93. GT_BeginRefresh        =     -$005a
  94. GT_EndRefresh          =     -$0060
  95. GT_SetGadgetAttrsA     =     -$002a
  96. GetDiskObjectNew       =     -$0084
  97. FreeDiskObject         =     -$005a
  98. CreateMsgPort          =     -$029a
  99. DeleteMsgPort          =     -$02a0
  100. AddAppIconA            =     -$003c
  101. RemoveAppIcon          =     -$0042
  102. GetMsg                 =     -$0174
  103. ReplyMsg               =     -$017a
  104. FreeMem                =     -$00d2
  105. AllocMem               =     -$00c6
  106. CurrentDir             =     -$007e
  107. OpenFromLock           =     -$017a
  108. Open                   =     -$001e
  109. Close                  =     -$0024
  110. Read                   =     -$002a
  111. Write                  =     -$0030
  112. DeleteFile             =     -$0048
  113. FPutS                  =     -$0156
  114. FPutC                  =     -$0138
  115. PutStr                 =     -$03b4
  116. Flush                  =     -$0168
  117. AllocDosObject         =     -$00e4
  118. FreeDosObject          =     -$00ea
  119. Examine                =     -$0066
  120. GetProgramDir          =     -$0258
  121. NameFromLock           =     -$0192
  122. AddPart                =     -$0372
  123. Lock                   =     -$0054
  124. UnLock                 =     -$005a
  125. Output                 =     -$003c
  126. Delay                  =     -$00c6
  127.  
  128. ; -- PowerPacker.library --
  129. ppLoadData             =     -$001e
  130. ppDecrunchBuffer       =     -$0024
  131. ppCalcChecksum         =     -$002A
  132. ppCalcPasskey          =     -$0030
  133. ppDecrypt              =     -$0036
  134. ppGetPassword          =     -$003C
  135. ppAllocCrunchInfo      =     -$0060
  136. ppFreeCrunchInfo       =     -$0066
  137. ppCrunchBuffer         =     -$006C
  138. ppWriteDataHeader      =     -$0072
  139. ppEnterPassword        =     -$0078
  140. ppErrorMessage         =     -$0084
  141.  
  142.  
  143. ;________________________________________________________________________
  144.  
  145.  
  146. ; -- MenuItem --
  147. CheckIt                =       $0001
  148. ItemText               =       $0002
  149. CommSeq                =       $0004
  150. MenuToggle             =       $0008
  151. ItemEnabled            =       $0010
  152. HighFlags              =       $00c0
  153. HighImage              =       $0000
  154. HighComp               =       $0040
  155. HighBox                =       $0080
  156. HighNone               =       $00c0
  157. Checked                =       $0100
  158. IsDrawn                =       $1000
  159. HighItem               =       $2000
  160. MenuToggled            =       $4000
  161.  
  162. ; -- Requester --
  163. PointRel               =       $0001
  164. PreDrawn               =       $0002
  165. NoisyReq               =       $0004
  166. SimpleReq              =       $0010
  167. UserReqImage           =       $0020
  168. NoReqBackFill          =       $0040
  169. ReqOffWindow           =       $1000
  170. ReqActive              =       $2000
  171. SysRequest             =       $4000
  172. DeferRefresh           =       $8000
  173.  
  174. ; -- Gadget --
  175. GFLG_GadHighBits       =       $0003
  176. GFLG_GadGhComp         =       $0000
  177. GFLG_GadGhBox          =       $0001
  178. GFLG_GadGhImage        =       $0002
  179. GFLG_GadGhNone         =       $0003
  180. GFLG_GadgImage         =       $0004
  181. GFLG_RelBottom         =       $0008
  182. GFLG_RelRight          =       $0010
  183. GFLG_RelWidth          =       $0020
  184. GFLG_RelHeight         =       $0040
  185. GFLG_Selected          =       $0080
  186. GFLG_Disabled          =       $0100
  187. GFLG_LabelMask         =       $3000
  188. GFLG_LabelIText        =       $0000
  189. GFLG_LabelString       =       $1000
  190. GFLG_LabelImage        =       $2000
  191. GFLG_TabCycle          =       $0200
  192. GFLG_StringExtend      =       $0400
  193. GACT_RelVerify         =       $0001
  194. GACT_Immediate         =       $0002
  195. GACT_EndGadget         =       $0004
  196. GACT_FollowMouse       =       $0008
  197. GACT_RightBorder       =       $0010
  198. GACT_LeftBorder        =       $0020
  199. GACT_TopBorder         =       $0040
  200. GACT_BottomBorder      =       $0080
  201. GACT_BorderSniff       =       $8000
  202. GACT_ToggleSelect      =       $0100
  203. GACT_BoolExtend        =       $2000
  204. GACT_StringLeft        =       $0000
  205. GACT_StringCenter      =       $0200
  206. GACT_StringRight       =       $0400
  207. GACT_LongInt           =       $0800
  208. GACT_AltKeymap         =       $1000
  209. GACT_StringExtend      =       $2000
  210. GACT_ActiveGadget      =       $4000
  211. GTYP_GadgetType        =       $fc00
  212. GTYP_SysGadget         =       $8000
  213. GTYP_ScrGadget         =       $4000
  214. GTYP_GzzGadget         =       $2000
  215. GTYP_ReqGadget         =       $1000
  216. GTYP_Sizing            =       $0010
  217. GTYP_WDragging         =       $0020
  218. GTYP_SDragging         =       $0030
  219. GTYP_WUpFront          =       $0040
  220. GTYP_SUpFront          =       $0050
  221. GTYP_WDownBack         =       $0060
  222. GTYP_SDownBack         =       $0070
  223. GTYP_Close             =       $0080
  224. GTYP_BoolGadget        =       $0001
  225. GTYP_Gadget0002        =       $0002
  226. GTYP_PropGadget        =       $0003
  227. GTYP_StrGadget         =       $0004
  228. GTYP_CustomGadget      =       $0005
  229. GTYP_GTYPMask          =       $0004
  230.  
  231. ; -- BoolInfo --
  232. BoolMask               =       $0001
  233.  
  234. ; -- IntuiMessage --
  235. IDCMP_SizeVerify       =   $00000001
  236. IDCMP_NewSize          =   $00000002
  237. IDCMP_RefreshWindow    =   $00000004
  238. IDCMP_MouseButtons     =   $00000008
  239. IDCMP_MouseMove        =   $00000010
  240. IDCMP_GadgetDown       =   $00000020
  241. IDCMP_GadgetUp         =   $00000040
  242. IDCMP_ReqSet           =   $00000080
  243. IDCMP_MenuPick         =   $00000100
  244. IDCMP_CloseWindow      =   $00000200
  245. IDCMP_RawKey           =   $00000400
  246. IDCMP_ReqVerify        =   $00000800
  247. IDCMP_ReqClear         =   $00001000
  248. IDCMP_MenuVerify       =   $00002000
  249. IDCMP_NewPrefs         =   $00004000
  250. IDCMP_DiskInserted     =   $00008000
  251. IDCMP_DiskRemoved      =   $00010000
  252. IDCMP_WBenchMessage    =   $00020000
  253. IDCMP_ActiveWindow     =   $00040000
  254. IDCMP_InactiveWindow   =   $00080000
  255. IDCMP_DeltaMove        =   $00100000
  256. IDCMP_VanillaKey       =   $00200000
  257. IDCMP_Intuiticks       =   $00400000
  258. IDCMP_IDCMPUpdate      =   $00800000
  259. IDCMP_MenuHelp         =   $01000000
  260. IDCMP_ChangeWindow     =   $02000000
  261. IDCMP_LonelyMessage    =   $80000000
  262. MenuHot                =       $0001
  263. MenuCancel             =       $0002
  264. MenuWaiting            =       $0003
  265. OkOk                   =   MenuHot
  266. OkAbort                =       $0004
  267. OkCancel               =   MenuCancel
  268. WBenchOpen             =       $0001
  269. WBenchClose            =       $0002
  270.  
  271. ; -- NewWindow --
  272. WFLG_SizeGadget        =       $0001
  273. WFLG_DragBar           =       $0002
  274. WFLG_DepthGadget       =       $0004
  275. WFLG_CloseGadget       =       $0008
  276. WFLG_SizeBright        =       $0010
  277. WFLG_SizeBottom        =       $0020
  278. WFLG_RefreshBits       =       $00c0
  279. WFLG_Smart_Refresh     =       $0000
  280. WFLG_Simple_Refresh    =       $0040
  281. WFLG_Super_Bitmap      =       $0080
  282. WFLG_Other_Refresh     =       $00c0
  283. WFLG_BackDrop          =       $0100
  284. WFLG_ReportMouse       =       $0200
  285. WFLG_GimmeZeroZero     =       $0400
  286. WFLG_BorderLess        =       $0800
  287. WFLG_Activate          =       $1000
  288. WFLG_WindowActive      =       $2000
  289. WFLG_InRequest         =       $4000
  290. WFLG_MenuState         =       $8000
  291. WFLG_RmbTrap           =   $00010000
  292. WFLG_NoCareRefresh     =   $00020000
  293. WFLG_WindowRefresh     =   $01000000
  294. WFLG_WBenchWindow      =   $02000000
  295. WFLG_WindowTicked      =   $04000000
  296. SuperUnused            =   $fcfc0000
  297. WFLG_NwExtended        =   $00040000
  298. WFLG_Visitor           =   $08000000
  299. WFLG_Zoomed            =   $10000000
  300. WFLG_HasZoom           =   $20000000
  301. DefaultMouseQueue      =           5
  302.  
  303. ; -- IntuiText --
  304. It_LeftEdge            =           4
  305. It_TopEdge             =           6
  306. It_ITextFont           =           8
  307. It_SIZEOF              =          20
  308.  
  309. ;-- RastPort --
  310. rp_Font                =          52
  311.  
  312.  
  313. ; -- GadTools --
  314. Generic_Kind           =           0
  315. Button_Kind            =           1
  316. CheckBox_Kind          =           2
  317. Integer_Kind           =           3
  318. ListView_Kind          =           4
  319. MX_Kind                =           5
  320. Number_Kind            =           6
  321. Cycle_Kind             =           7
  322. Palette_Kind           =           8
  323. Scroller_Kind          =           9
  324. Slider_Kind            =          11
  325. String_Kind            =          12
  326. Text_Kind              =          13
  327. Num_Kinds              =          14
  328. ButtonIDCMP            =   IDCMP_GadgetUp
  329. CheckBoxIDCMP          =   IDCMP_GadgetUp
  330. IntegerIDCMP           =   IDCMP_GadgetUp
  331. ;ListViewIDCMP          =   IDCMP_GadgetUp!IDCMP_GadgetDown!IDCMP_MouseMove!IDCMP_ArrowIDCMP
  332. MxIDCMP                =   IDCMP_GadgetDown
  333. NumberIDCMP            =   0
  334. CycleIDCMP             =   IDCMP_GadgetUp
  335. PaletteIDCMP           =   IDCMP_GadgetUp
  336. ScrollerIDCMP          =   IDCMP_GadgetUp!IDCMP_GadgetDown!IDCMP_MouseMove ;IDCMP_ArrowIDCMP!IDCMP_ScrollerIDCMP
  337. SliderIDCMP            =   IDCMP_GadgetUp!IDCMP_GadgetDown!IDCMP_MouseMove
  338. StringIDCMP            =   IDCMP_GadgetUp
  339. TextIDCMP              =   0
  340. GadToolsBit            =       $8000
  341. PlaceText_Left         =       $0001
  342. PlaceText_Right        =       $0002
  343. PlaceText_Above        =       $0004
  344. PlaceText_Below        =       $0008
  345. PlaceText_In           =       $0010
  346. Ng_HighLabel           =       $0020
  347. Nm_Title               =           1
  348. Nm_Item                =           2
  349. Nm_Sub                 =           3
  350. Nm_End                 =           0
  351. Menu_Image             =         128
  352. Nm_BarLabel            =          -1
  353. GtMX_Labels            =   $80080009
  354. GtBB_Recessed          =   $80080033
  355. GT_VisualInfo          =   $80080034
  356. GTCB_Checked           =   $80080004
  357. GTNM_Number            =   $8008000d
  358. GTNM_Border            =   $8008003a
  359. GTCY_Labels            =   $8008000e
  360. GTCY_Active            =   $8008000f
  361. GTST_MaxChars          =   $8008002e
  362. GTST_String            =   $8008002d
  363. GTTX_Text              =   $8008000b
  364. GTTX_CopyText          =   $8008000c
  365. GTTX_Border            =   $80080039
  366.  
  367. ; -- Intuition --
  368. GA_Disabled            =   $8003000e
  369.  
  370. ; -- Asl --
  371. ASL_Hail               =   $80080001
  372. ASL_Window             =   $80080002
  373. ASL_File               =   $80080008
  374. ASL_Dir                =   $80080009
  375. ASL_OKText             =   $80080012
  376. ASL_CancelText         =   $80080013
  377. ASL_FuncFlags          =   $80080014
  378. ASL_ExtFlags1          =   $80080016
  379.  
  380. ; -- AslRequestStruct --
  381. rf_File                =           4
  382. rf_Dir                 =           8
  383.  
  384. ; -- TagItem --
  385. Tag_Done               =          0
  386. Tag_User               =  $80000000
  387.  
  388. ; -- Screen --
  389. sc_Width               =         12
  390. sc_Height              =         14
  391. sc_WBorTop             =         35
  392. sc_WBorLeft            =         36
  393. sc_WBorRight           =         37
  394. sc_WBorBottom          =         38
  395. sc_Font                =         40
  396. sc_RastPort            =         84
  397.  
  398. ; -- ExtNewWindow --
  399. WA_Left                =  $80000064
  400. WA_Top                 =  $80000065
  401. WA_Width               =  $80000066
  402. WA_Height              =  $80000067
  403. WA_IDCMP               =  $8000006a
  404. WA_Flags               =  $8000006b
  405. WA_Gadgets             =  $8000006c
  406. WA_Title               =  $8000006e
  407. WA_AutoAdjust          =  $80000090
  408.  
  409. ; -- TextAttr --
  410. Ta_Name                =          0
  411. Ta_YSize               =          4
  412. Ta_Style               =          6
  413. Ta_Flags               =          7
  414.  
  415. ; -- TextFont --
  416. tf_YSize               =         20
  417. tf_XSize               =         24
  418.  
  419. ; -- NewGadget --
  420. gng_SizeOf             =         30
  421. gng_LeftEdge           =          0
  422. gng_TopEdge            =          2
  423. gng_Width              =          4
  424. gng_Height             =          6
  425. gng_GadgetText         =          8
  426. gng_TextAttr           =         12
  427. gng_GadgetID           =         16
  428. gng_Flags              =         18
  429. gng_VisualInfo         =         22
  430. gng_UserData           =         26
  431.  
  432. ; -- PowerPacker --
  433. Decr_Col0              =          0
  434. Decr_Col1              =          1
  435. Decr_Pointer           =          2
  436. Decr_Scroll            =          3
  437. Decr_None              =          4
  438. SpeedUp_BuffLarge      =          0
  439. SpeedUp_BuffMedium     =          1
  440. SpeedUp_BuffSmall      =          2
  441. Crun_Fast              =          0
  442. Crun_Mediocre          =          1
  443. Crun_Good              =          2
  444. Crun_VeryGood          =          3
  445. Crun_Best              =          4
  446.  
  447. ; -- Window --
  448. Wd_RPort               =         50
  449. Wd_BorderLeft          =         54
  450. Wd_BorderTop           =         55
  451. Wd_BorderRight         =         56
  452. Wd_BorderBottom        =         57
  453. Wd_BorderRPort         =         58
  454. wd_IFont               =        128
  455.  
  456. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  457. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  458.  
  459. GD_Working_Crunch      =   0
  460. GD_Working_Decrunch    =   1
  461. GD_Working_Nothing     =   2
  462. GD_Working_Skip        =   3
  463. GD_Working_Stop        =   4
  464. GD_Working_Status      =   5
  465. GD_Working_Name        =   6
  466. GD_Working_Length      =   7
  467. GD_Working_Dest        =   8
  468.  
  469. GD_Config_UseAltPath   =   0
  470. GD_Config_Eff          =   1
  471. GD_Config_Buf          =   2
  472. GD_Config_DecrEff      =   3
  473. GD_Config_Save         =   4
  474. GD_Config_Use          =   5
  475. GD_Config_Cancel       =   6
  476. GD_Config_Quit         =   7
  477. GD_Config_AltPath      =   8
  478. GD_Config_Get          =   9
  479. GD_Config_About        =  10
  480.  
  481. GD_Inter               =   0
  482.  
  483. Working_CNT            =   9
  484. Config_CNT             =  11
  485. About_CNT              =   1
  486. GadgetMaxNumber        =  11
  487.  
  488. Working_TNUM           =   0
  489. Config_TNUM            =   0
  490. About_TNUM             =   6
  491.  
  492. WorkingLeft            =  98
  493. WorkingTop             =  88
  494. WorkingWidth           = 361
  495. WorkingHeight          = 159
  496.  
  497. Working0_Left          =  12
  498. Working0_Top           =  33
  499. Working0_Width         = 337
  500. Working0_Height        = 115
  501.  
  502. Working1_Left          =   3
  503. Working1_Top           =   4
  504. Working1_Width         = 353
  505. Working1_Height        = 151
  506.  
  507. ConfigLeft             =  89
  508. ConfigTop              = 108
  509. ConfigWidth            = 293
  510. ConfigHeight           = 168
  511.  
  512. Config0_Left           =   4
  513. Config0_Top            =  57
  514. Config0_Width          = 285
  515. Config0_Height         =  81
  516.  
  517. AboutLeft:             = 209
  518. AboutTop:              =  49
  519. AboutWidth:            = 352
  520. AboutHeight:           = 198
  521.  
  522. About0_Left            =   5
  523. About0_Top             =   6
  524. About0_Width           = 341
  525. About0_Height          = 155
  526.  
  527. FileNameBufferL        = 256
  528. ConfigBufferL          = 488
  529.  
  530. ; -- ConfigBuffer --
  531. CP_Config_Version      =   0
  532. CP_Config_UseAltPath   =   1
  533. CP_Config_Efficiency   =   2
  534. CP_Config_Buffer       =   3
  535. CP_Config_Effect       =   4
  536. CP_Config_AltPath      =  14
  537. CP_Config_F            = 488
  538.  
  539.  
  540.  
  541. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  542. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  543. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  544. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  545. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  546. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  547.  
  548.  
  549.  
  550.     Move.l    A7,Stack        ; Sauver le pile
  551.     Jmp    Start
  552.  
  553.  
  554. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  555. *   Version d'AppPP.  Cette chaîne s'affiche avec la commande Version.  *
  556. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  557.  
  558.     dc.b    '$VER:AppPP_1.0',0,0
  559.  
  560.  
  561.  
  562.  
  563. Start:
  564.  
  565. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  566. *  S'occupe de prendre le message du Wb.  * * * * * * * * * * * * * * * *
  567. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  568.  
  569.     Move.l    ExecBase,a6
  570.     Suba.l    a1,a1            ; Notre processus
  571.     Jsr    FindTask(a6)        ; Obtenir un pointeur sur processus
  572.  
  573.     Move.l    d0,a3
  574.     Tst.l    $ac(a3)            ; Process->pr_CLI  =?  0
  575.     Bne    End_0             ; Non, lancé depuis le CLI, on quitte
  576.  
  577.     S_WaitWbMsg:            ; Oui, on continue
  578.     Lea    $5c(a3),a0        ; Process->pr_MsgPort
  579.     Jsr    WaitPort(a6)        ; Attendre l'arrivée d'un message
  580.  
  581.     Lea    $5c(a3),a0        ; Process->pr_MsgPort
  582.     Jsr    GetMSG(a6)        ; Prendre le message sur le port
  583.     Move.l    d0,WbMsg
  584.     Beq.s    S_WaitWbMsg
  585.  
  586.  
  587. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  588. *  Ouvrir toutes les librairies dont on a besoin.   * * * * * * * * * * *
  589. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  590.  
  591.     Move.l    ExecBase,a6
  592.     Lea    IconName,a1
  593.     Moveq    #37,d0
  594.     Jsr    OpenLibrary(a6)
  595.     Move.l    d0,IconBase
  596.     Beq    End
  597.  
  598.     Lea    WorkbenchName,a1
  599.     Moveq    #37,d0
  600.     Jsr    OpenLibrary(a6)
  601.     Move.l    d0,WorkbenchBase
  602.     Beq    End
  603.  
  604.     Lea    DosName,a1
  605.     Moveq    #36,d0
  606.     Jsr    OpenLibrary(a6)
  607.     Move.l    d0,DosBase
  608.     Beq    End
  609.  
  610.     Lea    GadtoolsName,a1
  611.     Moveq    #36,d0
  612.     Jsr    OpenLibrary(a6)
  613.     Move.l    d0,GadtoolsBase
  614.     Beq    End
  615.  
  616.     Lea    IntuitionName,a1
  617.     Moveq    #36,d0
  618.     Jsr    OpenLibrary(a6)
  619.     Move.l    d0,IntuitionBase
  620.     Beq    End
  621.  
  622.     Lea    ppName,a1
  623.     Moveq    #35,d0
  624.     Jsr    OpenLibrary(a6)
  625.     Move.l    d0,ppBase
  626.     Beq    End
  627.  
  628.  
  629. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  630. *  Installer l'AppIcon dans le WB.  (Utilise l'icône du programme)  * * *
  631. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  632.  
  633.     Move.l    ExecBase,a6
  634.     Move.l    #$1,d1            ; PublicMem
  635.     Move.l    #FileNameBufferL,d0    ; Allouer un tampon pour le nom
  636.     Jsr    AllocMem(a6)
  637.     Move.l    d0,FileNameBuffer
  638.     Beq    End
  639.  
  640.     Move.l    DosBase,a6
  641.     Jsr    GetProgramDir(a6)    ; Obtenir un Lock sur le répertoire
  642.     Move.l    d0,DirLock
  643.  
  644.     Move.l    DirLock,d1        ; Lock sur le répertoire
  645.     Move.l    FileNameBuffer,d2    ; Adresse du tampon
  646.     Move.l    #FileNameBufferL,d3    ; Longueur
  647.     Jsr    NameFromLock(a6)    ; Obtenir le nom du répertoire de démarrage
  648.     Tst.l    d0            ; NameFromLock Ok ?
  649.     Bne.s    S_NameFromLock_Ok    ; Oui, on continue
  650.     Bsr    FreeFileNameBuffer    ; Non, libérer le tampon
  651.     Jmp    End            ; Terminer le programme
  652.     S_NameFromLock_Ok:
  653.  
  654.     Move.l    FileNameBuffer,d1    ; DirName
  655.     Move.l    #ProgramName,d2        ; FileName
  656.     Move.l    #FileNameBufferL,d3    ; Size
  657.     Jsr    AddPart(a6)        ; rassembler le dir et le nom de fichier
  658.     Tst.l    d0            ; AddPart Ok ?
  659.     Bne.s    S_AddPart_Ok        ; Oui, on continue
  660.     Bsr    FreeFileNameBuffer    ; Libérer le tampon
  661.     Jmp    End            ; Terminer le programme
  662.     S_AddPart_Ok:
  663.  
  664.     Move.l    IconBase,a6
  665.     Move.l    FileNameBuffer,a0    ; Nom du programme
  666.     Jsr    GetDiskObjectNew(a6)    ; Obtenir la structure DiskObject
  667.     Move.l    d0,DiskObject
  668.     Bsr    FreeFileNameBuffer    ; Libérer le tampon
  669.     Tst.l    DiskObject        ; Obtention du DiskObject Ok ?
  670.     Bne.s    S_GetDiskObject_Ok    ; Oui, continuer
  671.     Jmp    End            ; Non, terminer le programme
  672.     S_GetDiskObject_Ok:
  673.     Move.l    d0,a0
  674.     Move.w    #0,48(a0)        ; DiskObject->do_Type = 0
  675.  
  676.  
  677. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  678. *  Créer un port message pour la gestion de l'AppIcon.  * * * * * * * * *
  679. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  680.  
  681.     Move.l    ExecBase,a6
  682.     Jsr    CreateMsgPort(a6)    
  683.     Move.l    d0,AppMsgPort
  684.     Beq    End_1
  685.  
  686.  
  687. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  688. *  Installer l'AppIcon dans le WB.  * * * * * * * * * * * * * * * * * * *
  689. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  690.  
  691.     Move.l    WorkbenchBase,a6
  692.     Moveq    #0,d0
  693.     Moveq    #0,d1
  694.     Lea    AppIconText,a0
  695.     Move.l    AppMsgPort,a1
  696.     Move.l    #0,a2
  697.     Move.l    Diskobject,a3
  698.     Move.l    #0,a4
  699.     Jsr    AddAppIconA(a6)
  700.     Move.l    d0,AppIcon
  701.     Beq    End_2
  702.  
  703.  
  704. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  705. *  Charger le fichier de configuration.   * * * * * * * * * * * * * * * *
  706. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  707.  
  708.     Move.l    ExecBase,a6
  709.     Move.l    #$10001,d1        ; PublicMem
  710.     Move.l    #ConfigBufferL,d0
  711.     Jsr    AllocMem(a6)        ; Allouer un tampon pour la config
  712.     Move.l    d0,ConfigBuffer0    ; Buffer de config 0
  713.     Bne.s    LC_AllocMem_Ok        ; Allocation à échoué ?
  714.     Move.l    DosBase,a6        ; Oui, on avertit l'utilisateur
  715.     Move.l    #NoMemory_ErrT,d1
  716.     Jsr    PutStr(a6)
  717.     Jmp    End_3            ;  et on quitte
  718.     LC_AllocMem_Ok:            ; Non, on continue
  719.  
  720.     Move.l    DosBase,a6
  721.     Move.l    #1005,d2        ; Lecture
  722.     Move.l    #ConfigFileName0,d1    ; Se trouve dans Env:
  723.     Jsr    Open(a6)        ; Ouvrir le fichier
  724.     Move.l    d0,ConfigFileName0_FH    ; Ouverture à échoué ?
  725.     Bne.s    LC_ConfigFileOpen_Ok    ; Non, on continue
  726.     Move.b    #0,ReplyMessage_Lock    ; Ne pas rendre le message
  727.     Jmp    ConfigPanel        ; Oui, pas de Config => ConfigPanel
  728.     LC_ConfigFileOpen_Ok:
  729.  
  730.     Move.l    d0,d1            ;!!  ConfigFileName0_FH
  731.     Move.l    ConfigBuffer0,d2    ; Buffer de config 0
  732.     Move.l    #ConfigBufferL,d3    ; 488 bytes
  733.     Jsr    Read(a6)        ; Lire le Fichier
  734.     Move.l    d0,d4
  735.     Move.l    ConfigFileName0_FH,d1    ; Refermer le fichier Config 0
  736.     Jsr    Close(a6)
  737.     Cmp.l    #488,d4            ; Le fichier a 488 bytes ?
  738.     Beq.s    LC_ConfigRead_Ok    ; Oui, on continue
  739.     Move.b    #0,ReplyMessage_Lock    ; Ne pas rendre le message
  740.     Jmp    ConfigPanel        ; Non, pas de Config => ConfigPanel
  741.     LC_ConfigRead_Ok:
  742.  
  743.  
  744. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  745. *                                    *
  746. *  DESCRIPTION:                                *
  747. *    WaitAppMsg:                            *
  748. *        Attend et prélève l' AppMessage    et prépare le pgm à    *
  749. *        boucler dans NextFile.  AppMessage est ensuite rendu.    *
  750. *    GetAppMessage:                            *
  751. *        Prélève le message et prépare le programme à boucler    *
  752. *        dans NextFile.  Si il n'y a pas de message, saut à    *
  753. *        WaitAppMsg.                        *
  754. *  INPUT:                                *
  755. *        AppMsgPort    =  Port message crée l'AppIcon.        *
  756. *  OUTPUT:                                *
  757. *        Msg.l        =  AppMessage                *
  758. *        FileNumer.l    =  Nombre de fichiers  *  8        *
  759. *        ReplyMessage_Lock= 1                    *
  760. *                                    *
  761. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  762.  
  763.  
  764. WaitAppMsg:
  765.     Move.l    ExecBase,a6
  766.     Move.l    AppMsgPort,a0
  767.     Jsr    WaitPort(a6)        ; Attente d'un message
  768.  
  769. GetAppMessage:
  770.     Move.l    #0,FileCount        ; Fichiers Traités  =  0
  771.  
  772.     Move.l    AppMsgPort,a0
  773.     Move.l    ExecBase,a6
  774.     Jsr    GetMsg(a6)        ; On prend le Message
  775.     Move.l    d0,Msg
  776.     Beq.s    WaitAppMsg
  777.  
  778.     Move.l    d0,a0            ;!! AppMessage
  779.     Lea    30(a0),a1        ; AppMessage->NumArgs
  780.     Move.l    (a1),d1            ;
  781.     Move.b    #1,ReplyMessage_Lock    ; Rendre le message à la fin du panel
  782.     Mulu    #8,d1            ; Nb de fichiers * 8
  783.     Move.l    d1,FileNumber        ; Nb * 8 dans FileNumber.l
  784.     Beq    ConfigPanel        ; Nb =? 0    Oui, ConfigPanel
  785.  
  786.     Move.b    #2,GUI_
  787.     Jsr    SetupScreen_
  788.     Tst.l    d0
  789.     Bne    Crunch_Request_Err    ; Erreur
  790.     Move.w    #WorkingLeft,Left
  791.     Move.w    #WorkingTop,Top
  792.     Move.w    #WorkingWidth,Width
  793.     Move.w    #WorkingHeight,Height
  794.     Bsr    OpenWindow_        ; Affichage de la Fenêtre "Quoi faire"
  795.     Move.l    Wnd,WorkingWnd
  796.     Tst.l    d0
  797.     Bne    Crunch_Request_Err    ; Erreur
  798.  
  799.     Move.l    #NormalBevelbox,Bevelbox_TagList
  800.     Move.w    #Working0_Top,BevelTop
  801.     Move.w    #Working0_Left,BevelLeft
  802.     Move.w    #Working0_Width,BevelWidth
  803.     Move.w    #Working0_Height,BevelHeight
  804.     Bsr    Render1            ; Dessiner la Bevelbox
  805.     Move.l    #InverseBevelbox,Bevelbox_TagList
  806.     Move.w    #Working1_Top,BevelTop
  807.     Move.w    #Working1_Left,BevelLeft
  808.     Move.w    #Working1_Width,BevelWidth
  809.     Move.w    #Working1_Height,BevelHeight
  810.     Bsr    Render1            ; Dessiner la Bevelbox
  811.  
  812. ;!!    Move.l    WorkingWnd,Wnd
  813.     Move.b    #$ff,UserResponse
  814.     Bsr    WaitMessages        ; Attendre réponse de l'utilisateur
  815.     Move.b    UserResponse,Working_CrunchUserResponse
  816. ;!!    Move.l    WorkingWnd,Wnd
  817.  
  818.     Cmp.b    #3,Working_CrunchUserResponse; L'utilisateur ne veut rien faire ?
  819.     Bne.s    GAM__de_crunch        ; Non, Continuer
  820. ;!!    Move.l    WorkingWnd,Wnd        ; Oui, fermer interface
  821.     Bsr    IMessageLoop
  822.     Bsr    CloseWindow_
  823.     Bsr    CloseDownScreen_
  824.     Jmp    ReplyMessage
  825.     GAM__de_crunch:
  826.  
  827.  
  828. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  829. *  Disabler Crunch, Decrunch et Nothing.  Enabler Skip et Stop.   * * * *
  830. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  831.  
  832.     Move.l    GadtoolsBase,a6
  833.     Move.l    WorkingWnd,a4
  834.     Lea    WorkingGadgets,a5
  835.     Move.l    a4,a1            ; Window Ptr
  836.     Suba.l    a2,a2            ; Req  (not implemented)
  837.     Move.l    0*4(a5),a0        ; Gadget 0  =  Crunch
  838.     Lea    GAM_WorkingGad0Attrs,a3
  839.     Jsr    GT_SetGadgetAttrsA(a6)
  840.  
  841.     Move.l    a4,a1            ; Window Ptr
  842.     Suba.l    a2,a2            ; Req  (not implemented)
  843.     Move.l    1*4(a5),a0        ; Gadget 1  =  Decrunch
  844.     Lea    GAM_WorkingGad1Attrs,a3
  845.     Jsr    GT_SetGadgetAttrsA(a6)
  846.  
  847.     Move.l    a4,a1            ; Window Ptr
  848.     Suba.l    a2,a2            ; Req  (not implemented)
  849.     Move.l    2*4(a5),a0        ; Gadget 2  =  Nothing
  850.     Lea    GAM_WorkingGad2Attrs,a3
  851.     Jsr    GT_SetGadgetAttrsA(a6)
  852.  
  853.     Move.l    a4,a1            ; Window Ptr
  854.     Suba.l    a2,a2            ; Req  (not implemented)
  855.     Move.l    3*4(a5),a0        ; Gadget 3  =  Skip
  856.     Lea    GAM_WorkingGad3Attrs,a3
  857.     Jsr    GT_SetGadgetAttrsA(a6)
  858.     
  859.     Move.l    a4,a1            ; Window Ptr
  860.     Suba.l    a2,a2            ; Req  (not implemented)
  861.     Move.l    4*4(a5),a0        ; Gadget 4  =  Stop
  862.     Lea    GAM_WorkingGad4Attrs,a3
  863.     Jsr    GT_SetGadgetAttrsA(a6)
  864.  
  865.  
  866. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  867. *  Allouer une structure CrunchInfo en fonction des Prefs.  * * * * * * *
  868. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  869.  
  870.     Move.l    ConfigBuffer0,a0
  871.     Moveq    #0,d0
  872.     Moveq    #0,d1
  873.     Move.b    CP_Config_Efficiency(a0),d0    
  874.     Move.b    CP_Config_Buffer(a0),d1
  875.     Cmp.b    #2,d1            ; Désir Large = 2
  876.     Beq.s    GAM_SetPrefs0
  877.     Cmp.b    #0,d1            ; Désir Small = 0
  878.     Beq.s    GAM_SetPrefs1
  879.     Jmp    GAM_SetPrefsF        ; Désir Medium = PP Medium = 1
  880.     GAM_SetPrefs0:
  881.     Moveq    #SpeedUp_BuffLarge,d1    ; PP Large = 0
  882.     Jmp    GAM_SetPrefsF
  883.     GAM_setPrefs1:
  884.     Moveq    #SpeedUp_BuffSmall,d1    ; PP Small = 2
  885. ;!!    Jmp    GAM_SetPrefsF
  886.     GAM_SetPrefsF:
  887.     Suba.l    a0,a0            ; Allocation de CrunchInfo
  888.     Suba.l    a1,a1            ; pour la fonction
  889.     Move.l    ppBase,a6
  890.     Jsr    ppAllocCrunchInfo(a6)    ; powerpacker.library/CrunchBuffer()
  891.     Move.l    d0,CrunchInfo
  892.     Tst.l    d0
  893.     Beq    AllocCrunchInfo_Err
  894.  
  895.  
  896. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  897. *  Allouer un tampon pour le nom de fichier pour NextFile.  * * * * * * *
  898. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  899.  
  900.     Move.l    ExecBase,a6
  901.     Move.l    #FileNameBufferL,d0
  902.     Move.l    #1,d1
  903.     Jsr    AllocMem(a6)        ; Allouer un tampon pour le nom du
  904.     Move.l    d0,FileNameBuffer    ; fichier
  905.     Beq    AllocMem_Err
  906.  
  907.  
  908. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  909. *                                    *
  910. *  DESCRIPTION:                                *
  911. *    NextFile:                            *
  912. *        Traite les fichiers en boucle jusqu'à ce qu'il n'y en    *
  913. *        ait plus à traiter.  S'occupe intégralement des erreurs.*
  914. *        Détermine si le fichier est compacté et se branche à    *
  915. *        ToDataCrunched ou ToDataNotCrunched suivant les cas.    *
  916. *  INPUT:                                *
  917. *        Msg        =  AppMessage                *
  918. *        FileNameBuffer    =  Pointeur sur le tampon du nom.    *
  919. *        FileCount    =  Doit être égal à zéro        *
  920. *  OUTPUT:                                *
  921. *                                    *
  922. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  923.  
  924. NextFile:                ; Fichier suivant
  925.     Move.l    FileCount,d0
  926.     Move.l    Msg,a0
  927.     Lea    34(a0),a1
  928.     Move.l    (a1),a0
  929.     Adda.l    d0,a0            ; Trouver le Lock sur le répertoire
  930.     Move.l    (a0),DirLock
  931.  
  932.     Move.l    DosBase,a6
  933.     Move.l    DirLock,d1
  934.     Move.l    FileNameBuffer,d2    ; Obtenir le nom du Path
  935.     Move.l    #FileNameBufferL,d3    ; Le nom est mis dans le tampon
  936.     Jsr    NameFromLock(a6)    ; prévu où pointe FileNameBuffer
  937.  
  938.     Move.l    FileCount,d0
  939.     Move.l    Msg,a0
  940.     Lea    34(a0),a1
  941.     Move.l    (a1),a0
  942.     Adda.l    d0,a0            ; Chercher le nom du fichier
  943.     Move.l    4(a0),d2
  944.     Move.l    d2,FileName        ; Sauver l'adresse du nom dans FileName
  945.     Move.l    #FileNameBufferL,d3
  946.     Move.l    FileNameBuffer,d1
  947.     Jsr    AddPart(a6)        ; Concaténer le nom du dir avec le nom de fichier
  948.  
  949.     Move.l    FileName,a0
  950.     Move.l    a0,d0
  951.     Calculate_StrLengthB:
  952.     Cmp.b    #0,(a0)+
  953.     Bne.s    Calculate_StrLengthB    ; Calculer la longueur de la
  954.     Suba.l    d0,a0            ; chaîne FileName
  955.     Move.l    a0,d1
  956.     Move.b    d1,FileName_StrLength
  957.  
  958.     Cmp.b    #1,FileName_StrLength    ; répertoire? -> chaîne de 1 byte
  959.     Beq    NF_NoFileNameWriting    ; Oui, ne pas écrire FileName
  960.     Move.l    GadtoolsBase,a6
  961.     Move.l    WorkingWnd,a1        ; Struct Window en a1
  962.     Suba.l    a2,a2            ; Req = 0
  963.     Lea    WriteTextTags,a3    ; Tags en a3
  964.     Move.l    FileName,4(a3)        ; Adresse du nom à GTTX_Text
  965.     Lea    WorkingGadgets,a0
  966.     Move.l    6*4(a0),a0        ; Name Gadget
  967.     Jsr    GT_SetGadgetAttrsA(a6)    ; Afficher nom du fichier
  968.     NF_NoFileNameWriting:
  969.  
  970.     Move.l    DosBase,a6
  971.     Move.l    FileNameBuffer,d1
  972.     Move.l    #1005,d2        ; Obtenir un Lock sur le nom du
  973.     Jsr    Lock(a6)        ; fichier avec Path complet
  974.     Move.l    d0,FileLock        ; Lock Ok ?
  975.     Bne.s    NF_Lock_Ok            ; Oui, on continue
  976.     Lea    NF_LockErr_EasyT,a0
  977.     Bsr    EasyRequest_Com
  978.     Jmp    NoDecrunch
  979.     NF_Lock_Ok:    
  980.  
  981.     Moveq    #2,d1            ; Type de DosObject
  982.     Moveq    #0,d2            ; TagList
  983.     Move.l    DosBase,a6
  984.     Jsr    AllocDosObject(a6)    ; On alloue une structure pour la
  985.     Move.l    d0,DosObject        ; fonction Examine()
  986.     Beq    AllocDosObject_Err
  987.  
  988.     Move.l    FileLock,d1
  989.     Move.l    DosObject,d2
  990.     Jsr    Examine(a6)        ; On Examine() le fichier d'après
  991.     Move.l    DosObject,a0        ;  le Lock trouvé précédemment.
  992.     Tst.l    d0
  993.     Bne.s    NF_Examine_Ok        ; Examine() est ok, on continue
  994.     Move.l    DosObject,d2
  995.     Moveq    #2,d1            ; Libérer la structure DosObject
  996.     Jsr    FreeDosObject(a6)
  997.     Move.l    FileLock,d1
  998.     Jsr    UnLock(a6)        ; On délock la fichier
  999.     Lea    NF_ExamineErr_EasyT,a0    ; Avertir
  1000.     Bsr    EasyRequest_Com
  1001.     Jmp    NoDecrunch
  1002.     NF_Examine_Ok:
  1003.     Move.l    124(a0),FileLength    ; FileInfoBlock->fib_Size
  1004.  
  1005.     Move.l    FileLock,d1
  1006.     Jsr    UnLock(a6)        ; On délock le fichier.
  1007.  
  1008.     Move.l    DosObject,a0
  1009.     Tst.l    4(a0)            ; Est-ce un répertoire ?
  1010.     Blt.s    IsAFile            ; Si non, on le continue.
  1011.     Move.l    #Working_DirErrT,WTT_Text; Adresse du nom à GTTX_Text
  1012.     Bsr    SetWorkingGad5Attrs    ; Oui, afficher DirErrT
  1013.     Jmp    NoDecrunch        ; Terminer le traitement du fichier
  1014.     IsAFile:
  1015.  
  1016.     Move.l    DosBase,a6
  1017.     Move.l    DosObject,d2
  1018.     Moveq    #2,d1
  1019.     Jsr    FreeDosObject(a6)    ; Libérer la structure DosObject
  1020.  
  1021.     Move.l    #0,SBuffer        ; On vide le tampon de 4 octets
  1022.  
  1023.     Move.l    #1005,d2        ; Mode_OldFile
  1024.     Move.l    FileNameBuffer,d1
  1025.     Jsr    Open(a6)        ; On Open() le fichier en question
  1026.     Move.l    d0,FileHandle        ; Gestionnaire dans FileHandle
  1027.     Bne.s    FileOpen_Ok        ; Ok, on continue.
  1028.     Lea    OpenReadErr_EasyT,a0
  1029.     Bsr    EasyRequest_Com        ; Erreur, Avertir
  1030.     Jmp    NoDecrunch        ; Fin du traitement du fichier
  1031.     FileOpen_Ok:            ; Pas d'erreur, on continue
  1032.  
  1033.     Move.l    #Working_ScanningT,WTT_Text; GTTX_Text  =  Adresse du texte
  1034.     Bsr    SetWorkingGad5Attrs    ; Ecrire Scanning
  1035.  
  1036.     Move.l    GadtoolsBase,a6
  1037.     Lea    WorkingGadgets,a0
  1038.     Move.l    7*4(a0),a0        ; Source Gadget
  1039.     Move.l    WorkingWnd,a1        ; Struct Window en a1
  1040.     Suba.l    a2,a2            ; Req = 0
  1041.     Lea    WriteNumberTags,a3    ; Tags en a3
  1042.     Move.l    FileLength,WNT_Number    ; Longueur du fichier
  1043.     Jsr    GT_SetGadgetAttrsA(a6)    ; Afficher longueur du fichier
  1044.  
  1045.     Bsr    GetWorkingMessage    ; Vérifier si gadget est appuyé
  1046.     Cmp.b    #4,Working_UserResponse    ; Skip File ?
  1047.     Beq    NextFile_Skip1        ; Oui, on se branche à la routine
  1048.     Cmp.b    #5,Working_UserResponse    ; Stop All ?
  1049.     Beq    NextFile_Stop1        ; Oui, on se branche à la routine
  1050.  
  1051.     Move.l    DosBase,a6
  1052.     Move.l    FileHandle,d1
  1053.     Move.l    #SBuffer,d2        ; On lit les 4 premiers octets du
  1054.     Move.l    #4,d3            ; fichier
  1055.     Jsr    Read(a6)        ; On écrit dans SBuffer
  1056.     Move.l    d0,d4            ; Nb de bytes lus
  1057.     Move.l    FileHandle,d1        ; Fermer le fichier
  1058.     Jsr    Close(a6)
  1059.     Cmp.l    #4,d4            ; Erreur de lecture du fichier ?
  1060.     Beq.s    FileNotEmpty        ; Non, on continue
  1061.     Lea    NF_ReadErr_EasyT,a0
  1062.     Bsr    EasyRequest_Com
  1063.     Jmp    NoDecrunch        ; Passer au fichier suivant
  1064.     FileNotEmpty:
  1065.  
  1066.     Move.l    SBuffer,d0        ; On vérifie le contenu de SBuffer
  1067.     Cmp.l    #'PP20',d0        ; = 'PP20' => compacté normalement
  1068.     Beq    ToDataCrunched
  1069.     Cmp.l    #'PX20',d0        ; = 'PX20' => compacté avec passe
  1070.     Beq    ToDataCrunched
  1071.     Jmp    ToDataNotCrunched        ; Non Compacté
  1072.  
  1073.                     ; Traitement des stops.
  1074.     NextFile_Skip1:            ;
  1075.     Move.l    DosBase,a6
  1076.     Move.l    FileHandle,d1
  1077.     Jsr    Close(a6)        ; Fermer le fichier
  1078.     Move.l    #Working_SkipT,WTT_Text    ; GTTX_Text  =  Adresse du texte
  1079.     Bsr    SetWorkingGad5Attrs
  1080.     Jmp    NoDecrunch        ; Traitement terminé
  1081.     NextFile_Stop1:            ;
  1082.     Move.l    DosBase,a6
  1083.     Move.l    FileHandle,d1
  1084.     Jsr    Close(a6)        ; Fermer le fichier
  1085.     Move.l    #Working_StopT,WTT_Text    ; GTTX_Text  =  Adresse du texte
  1086.     Bsr    SetWorkingGad5Attrs
  1087.     Jmp    FreeBuffers        ; Arrêt total
  1088.                     ; Traitement des erreurs graves.
  1089.     AllocDosObject_Err:
  1090.     Move.l    DosBase,a6
  1091.     Move.l    FileLock,d1        ; on délock le fichier
  1092.     Jsr    UnLock(a6)
  1093.     Bsr    FreeFileNameBuffer    ; Libérer le tampon FileNameBuffer
  1094.     AllocMem_Err:
  1095.     Move.l    ppBase,a6
  1096.     Move.l    CrunchInfo,a0
  1097.     Jsr    ppFreeCrunchInfo(a6)    ; Libérer la structure CrunchInfo
  1098.     AllocCrunchInfo_Err:
  1099.     Crunch_Request_Err:
  1100.     Working_Request_Err:
  1101.     Move.l    ExecBase,a6
  1102.     Move.l    Msg,a1            ; Rendre le message AppMessage
  1103.     Jsr    ReplyMsg(a6)
  1104.     Move.l    DosBase,a6
  1105.     Move.l    #NoMemory_ErrT,d1
  1106.     Jsr    PutStr(a6)
  1107.     Jmp    End_
  1108.  
  1109. ToDataCrunched:
  1110.     Bsr    DataCrunched        ; se Brancher (permet un retour par Rts)
  1111.     Jmp    NoDecrunch
  1112. ToDataNotCrunched:
  1113.     Bsr    DataNotCrunched        ; se Brancher (permet un retour par Rts)
  1114. ;!!    Jmp    NoDecrunch
  1115.  
  1116. NoDecrunch:                ; Fin du traitement du fichier
  1117.     Add.l    #8,FileCount        ; On ajoute 8 au nbre de fichiers
  1118.     Move.l    FileNumber,d0        ; traités (facilite l'accès au message)
  1119.     Cmp.l    FileCount,d0        ; Nbre traités  =?  Nbre total
  1120.     Beq.s    FreeBuffers        ; Si oui, traitement terminé
  1121.     Jmp    NextFile        ; Si non, fichier suivant
  1122.  
  1123. FreeBuffers:
  1124.     Move.l    DosBase,a6
  1125.     Lea    Finished_EasyT,a0
  1126.     Bsr    EasyRequest_Com
  1127.     Move.l    WorkingWnd,Wnd
  1128.     Bsr    IMessageLoop
  1129.     Bsr    CloseWindow_        ; Fin du traitement _des_ fichiers
  1130.     Bsr    CloseDownScreen_    ; On ferme l'interface
  1131.     Bsr    FreeFileNameBuffer    ; Libérer le tampon
  1132.     Move.l    ppBase,a6
  1133.     Move.l    CrunchInfo,a0        ; Libérer la structure CrunchInfo
  1134.     Jsr    ppFreeCrunchInfo(a6)
  1135.  
  1136. ReplyMessage:
  1137.     Move.l    ExecBase,a6
  1138.     Move.l    Msg,a1
  1139.     Jsr    ReplyMsg(a6)        ; Renvoie l'AppMessage au système
  1140.     Jmp    GetAppMessage        ; On va chercher l'éventuel message suivant
  1141.  
  1142.  
  1143. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1144. *                                    *
  1145. *  DESCRIPTION:                                *
  1146. *    DataNotCrunched:                        *
  1147. *        Teste si l'utilisateur veut compacter.  Si oui,        *
  1148. *        effectue le compactage et sauve le fichier.        *
  1149. *        S'occupe intégralement du traitement des erreurs.    *
  1150. *  INPUT:                                *
  1151. *        Working_CrunchUserResponse=  1 pour compacter        *
  1152. *        FileLength        =  Longueur du fichier        *
  1153. *        FileNameBuffer        =  APTR sur le nom de fichier    *
  1154. *  OUTPUT:                                *
  1155. *                                    *
  1156. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1157.  
  1158.  
  1159. DataNotCrunched:            ; Fichier non compacté
  1160.     Cmp.b    #1,Working_CrunchUserResponse; Veut-on le compacter ?
  1161.     Beq.s    DataNotCrunched_Ok    ; Oui, on traite le fichier
  1162.     Move.l    #Working_NotCrunchedErrT,WTT_Text; GTTX_Text  =  Adresse du texte
  1163.     Bsr    SetWorkingGad5Attrs
  1164.     Jmp    DNC_End            ; Fichier suivant
  1165.     DataNotCrunched_Ok:
  1166.  
  1167.     Move.l    ExecBase,a6
  1168.     Move.l    FileLength,d0
  1169.     Move.l    #$1,d1            ; PublicMem
  1170.     Jsr    AllocMem(a6)        ; On alloue un tampon de la longueur
  1171.     Move.l    d0,FileBuffer        ; du fichier
  1172.     Bne.s    DNC_AllocMem_Ok        ; Allocation Ok, on continue
  1173.     Move.l    DosBase,a6
  1174.     Lea    DNC_NoMemErr_EasyT,a0
  1175.     Bsr    EasyRequest_Com        ; Non, avertir
  1176.     Jmp    DNC_End            ; Pas de compact, Fichier suivant
  1177.     DNC_AllocMem_Ok:
  1178.  
  1179.     Move.l    DosBase,a6
  1180.     Move.l    FileNameBuffer,d1
  1181.     Move.l    #1005,d2        ; Fichier existant
  1182.     Jsr    Open(a6)        ; On Open() le fichier
  1183.     Move.l    d0,FileHandle
  1184.     Bne.s    DNC_Open_Ok        ; Ouverture Ok
  1185.     Lea    OpenReadErr_EasyT,a0
  1186.     Bsr    EasyRequest_Com
  1187.     Jmp    DNC_End1
  1188.     DNC_Open_Ok:            ; On continue
  1189.  
  1190.     Move.l    #Working_LoadingT,WTT_Text; GTTX_Text  =  Adresse du texte
  1191.     Bsr    SetWorkingGad5Attrs
  1192.  
  1193.     Bsr    GetWorkingMessage    ; On vérifie si gadget appuyé.
  1194.     Cmp.b    #4,Working_UserResponse
  1195.     Beq    DNC_Skip1
  1196.     Cmp.b    #5,Working_UserResponse
  1197.     Beq    DNC_Stop1
  1198.  
  1199.     Move.l    DosBase,a6
  1200.     Move.l    FileHandle,d1
  1201.     Move.l    FileBuffer,d2        ; On remplit le tampon avec le
  1202.     Move.l    FileLength,d3        ; contenu du fichier qu'on Read()
  1203.     Jsr    Read(a6)
  1204.     Move.l    d0,d4
  1205.     Move.l    FileHandle,d1
  1206.     Jsr    Close(a6)        ; On referme le fichier
  1207.     Cmp.l    FileLength,d4        ; Longueur égale ?
  1208.     Beq.s    DNC_Read_Ok        ; Oui, on continue
  1209.     Lea    DNC_ReadErr_EasyT,a0
  1210.     Bsr    EasyRequest_Com
  1211.     Jmp    DNC_End1
  1212.     DNC_Read_Ok:
  1213.  
  1214.     Bsr    GetWorkingMessage    ; On vérifie si gadget appuyé.
  1215.     Cmp.b    #4,Working_UserResponse
  1216.     Beq    DNC_Skip2
  1217.     Cmp.b    #5,Working_UserResponse
  1218.     Beq    DNC_Stop2
  1219.  
  1220.     Move.l    #Working_CrunchingT,WTT_Text; GTTX_Text  =  Adresse du texte
  1221.     Bsr    SetWorkingGad5Attrs
  1222.  
  1223.     Move.l    ppBase,a6
  1224.     Move.l    FileLength,d0        ; Length en d0
  1225.     Move.l    CrunchInfo,a0        ; CrunchInfo en a0
  1226.     Move.l    FileBuffer,a1        ; Buffer en a1
  1227.     Jsr    ppCrunchBuffer(a6)    ; On compacte le tampon
  1228.     Move.l    d0,ppLength        ; Longueur compacté ou code d'erreur
  1229.     Cmp.l    #-1,d0            ; Buffer OverFlow ?
  1230.     Bne.s    DNC_OverFlow_Ok        ; Non, on continue
  1231.     Move.l    #Working_DNC_OverFlowT,WTT_Text; GTTX_Text  =  Adresse du texte
  1232.     Bsr    SetWorkingGad5Attrs
  1233.     Jmp    DNC_End
  1234.     DNC_OverFlow_Ok:
  1235.     Cmp.l    #0,d0            ; Crunch Aborted ?
  1236.     Bne.s    DNC_Aborted_Ok        ; Non, on continue
  1237.     Move.l    #Working_DNC_AbortedT,WTT_Text; GTTX_Text  =  Adresse du texte
  1238.     Bsr    SetWorkingGad5Attrs
  1239.     Jmp    DNC_End
  1240.     DNC_Aborted_Ok:
  1241.  
  1242.     Move.l    GadtoolsBase,a6
  1243.     Lea    WorkingGadgets,a0
  1244.     Move.l    8*4(a0),a0        ; Source Gadget
  1245.     Move.l    WorkingWnd,a1        ; Struct Window en a1
  1246.     Suba.l    a2,a2            ; Req = 0
  1247.     Lea    WriteNumberTags,a3    ; Tags en a3
  1248.     Move.l    ppLength,WNT_Number    ; Longueur du fichier
  1249.     Jsr    GT_SetGadgetAttrsA(a6)    ; Afficher longueur compacté
  1250.  
  1251.     Bsr    GetWorkingMessage    ; On vérifie si gadget appuyé.
  1252.     Cmp.b    #4,Working_UserResponse
  1253.     Beq    DNC_Skip3
  1254.     Cmp.b    #5,Working_UserResponse
  1255.     Beq    DNC_Stop3
  1256.                     ; Ouvrir le fichier en écriture
  1257.     Bsr    OpenSaveFile        ; selon preferences
  1258.  
  1259.     Move.l    DosBase,a6
  1260.     Cmp.l    #0,FileHandle        ; Ouverture réussie ?
  1261.     Bne.s    DNC_OpenSaveFile_Ok    ; Oui, on continue
  1262.     Lea    OpenWriteErr_EasyT,a0
  1263.     Bsr    EasyRequest_Com        ; Non, on avertit l'utilisateur
  1264.     Jmp    DNC_End1        ; Libérer la mémoire et continuer
  1265.     DNC_OpenSaveFile_Ok:        ; Overture Ok, on continue
  1266.  
  1267.     Move.l    #Working_SavingT,WTT_Text; GTTX_Text  =  Adresse du texte
  1268.     Bsr    SetWorkingGad5Attrs
  1269.  
  1270.     Move.l    FileHandle,d0        ; FH en d0
  1271.     Moveq    #0,d1
  1272.     Move.l    ConfigBuffer0,a0
  1273.     Move.b    CP_Config_Efficiency(a0),d1;Efficiency en d1
  1274.     Moveq    #0,d2            ; Crypt = 0
  1275.     Moveq    #0,d3
  1276.     Move.l    ppBase,a6
  1277.     Jsr    ppWriteDataHeader(a6)    ; On écrit l'entête 'PP20'
  1278.     Tst.l    d0            ; Ecriture à échoué ?
  1279.     Bne.s    DNC_DataHeader_Ok    ; Non, on continue
  1280.     Lea    WriteErr_EasyT,a0
  1281.     Bsr    EasyRequest_Com        ; Oui, on avertit l'utilisateur
  1282.     Jmp    DNC_End2        ; Préparer à quitter la routine
  1283.     DNC_DataHeader_Ok:
  1284.  
  1285.     Move.l    DosBase,a6
  1286.     Move.l    FileHandle,d1
  1287.     Move.l    FileBuffer,d2        ; On écrit le contenu du tampon
  1288.     Move.l    ppLength,d3        ; On Write() la longueur compact.
  1289.     Jsr    Write(a6)
  1290.     Move.l    d0,d4
  1291.     Move.l    FileHandle,d1
  1292.     Jsr    Close(a6)
  1293.     Cmp.l    ppLength,d4        ; Erreur d'écriture ?
  1294.     Beq.s    DNC_Write_Ok        ; Non, on continue
  1295.     Lea    WriteErr_EasyT,a0
  1296.     Bsr    EasyRequest_Com        ; Oui, avertir l'utilisateur
  1297.     Jmp    DNC_End2        ; Préparer à quitter la routine
  1298.     DNC_Write_Ok:
  1299. ;!!    Jmp    DNC_End1
  1300.  
  1301.     DNC_End1:
  1302.     Move.l    ExecBase,a6
  1303.     Move.l    FileBuffer,a1        ; Libérer la mémoire du fichier
  1304.     Move.l    FileLength,d0
  1305.     Jsr    FreeMem(a6)
  1306. ;!!    Jmp    DNC_End
  1307.     DNC_End:
  1308.     Rts                ; Compacatage terminé
  1309.     DNC_End2:
  1310.     Move.l    DosBase,a6
  1311.     Move.l    FileHandle,d1        ; Fermer le fichier
  1312.     Jsr    Close(a6)
  1313.     Move.l    FileNameBuffer,d1
  1314.     Jsr    DeleteFile(a6)        ; Effacer le fichier destination
  1315.     Jmp    DNC_End1        ; Terminer et quitter la routine
  1316.  
  1317.  
  1318.     DNC_Skip_Com:
  1319.     Move.l    DosBase,a6
  1320.     Move.l    FileHandle,d1
  1321.     Jsr    Close(a6)
  1322.     Rts
  1323.     DNC_Stop1:
  1324.     Bsr    DNC_Skip_Com
  1325.     Jmp    DNC_Stop2        
  1326.     DNC_Skip1:
  1327.     Bsr    DNC_Skip_Com
  1328. ;!!    Jmp    DNC_Skip2
  1329.     DNC_Skip2:
  1330.     DNC_Skip3:
  1331.     Move.l    #Working_SkipT,WTT_Text    ; GTTX_Text  =  Adresse du texte
  1332.     Bsr    SetWorkingGad5Attrs
  1333.     Jmp    DNC_End1        ; Traitement terminé
  1334.     DNC_Stop2:
  1335.     DNC_Stop3:    
  1336.     Move.l    #Working_StopT,WTT_Text    ; GTTX_Text  =  Adresse du texte
  1337.     Bsr    SetWorkingGad5Attrs
  1338.     Move.l    FileNumber,FileCount    ; Dernier fichier traité
  1339.     Subq.l    #8,FileCount
  1340.     Jmp    DNC_End1        ; Libérer la mémoire et terminer
  1341.  
  1342.  
  1343. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1344. *                                    *
  1345. *  DESCRIPTION:                                *
  1346. *    DataCrunched:                            *
  1347. *        Teste si l'utilisateur veut décompacter.  Si oui,    *
  1348. *        effectue le décompactage et sauve le fichier.        *
  1349. *        S'occupe intégralement du traitement des erreurs    *
  1350. *  INPUT:                                *
  1351. *        Working_CrunchUserResponse=  2 pour décompacter        *
  1352. *        FileNameBuffer        =  APTR sur le nom du fichier    *
  1353. *  OUTPUT:                                *
  1354. *                                    *
  1355. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1356.  
  1357.  
  1358. DataCrunched:                ; Fichier compacté
  1359.     Cmp.b    #2,Working_CrunchUserResponse; Veut-on le décompacter ?
  1360.     Beq.s    DataCrunched_Ok        ; Oui, on continue
  1361.     Move.l    #Working_CrunchedErrT,WTT_Text; GTTX_Text  =  Adresse du texte
  1362.     Bsr    SetWorkingGad5Attrs
  1363.     Jmp    DC_End
  1364.     DataCrunched_Ok:
  1365.  
  1366.     Move.l    #Working_DC_LoadDecrT,WTT_Text; GTTX_Text  =  Adresse du texte
  1367.     Bsr    SetWorkingGad5Attrs
  1368.  
  1369.     Bsr    GetWorkingMessage    ; On vérifie si gadget appuyé.
  1370.     Cmp.b    #4,Working_UserResponse
  1371.     Beq    DC_Skip1
  1372.     Cmp.b    #5,Working_UserResponse
  1373.     Beq    DC_Stop1
  1374.  
  1375.     Move.l    ppBase,a6
  1376.     Moveq    #0,d0
  1377.     Move.l    ConfigBuffer0,a0
  1378.     Move.b    CP_Config_Effect(a0),d0    ; Decr_Effect en d0
  1379.     Move.l    FileNameBuffer,a0    ; Buffer sur le nom du fichier
  1380.     Move.l    #$1,d1            ; MemType: Public
  1381.     Lea    Buffer_,a1        ; Adresse de la variable du tampon
  1382.     Lea    Len_,a2            ; Adresse de la variable de la longueur
  1383.     Move.l    #0,a3            ; Pass Requester: None
  1384.     Jsr    ppLoadData(a6)        ; On décompacte le fichier
  1385.     Tst.b    d0            ; Erreur ?
  1386.     Beq    ppLoadData_Ok        ; Non, on continue
  1387.     Cmp.b    #-1,d0
  1388.     Beq.s    ppLD_OpenErr
  1389.     Cmp.b    #-2,d0
  1390.     Beq.s    ppLD_ReadErr        ; Oui, suivant le type
  1391.     Cmp.b    #-3,d0            ; d'erreur, on écrit
  1392.     Beq.s    ppLD_NoMemErr        ; un message approprié
  1393.     Cmp.b    #-4,d0
  1394.     Beq.s    ppLD_CryptErr
  1395.     Cmp.b    #-5,d0
  1396.     Beq.s    ppLD_PassErr
  1397.     Cmp.b    #-6,d0
  1398.     Beq.s    ppLD_UnknownPP
  1399.     Cmp.b    #-7,d0
  1400.     Beq.s    ppLD_EmptyErr
  1401.     ppLD_OpenErr:
  1402.     Lea    OpenReadErr_EasyT,a0
  1403.     Jmp    ppLoadData_Err
  1404.     ppLD_ReadErr:
  1405.     Lea    DC_ReadErr_EasyT,a0
  1406.     Jmp    ppLoadData_Err
  1407.     ppLD_NoMemErr:
  1408.     Lea    DC_NoMemErr_EasyT,a0
  1409.     Jmp    ppLoadData_Err
  1410.     ppLD_CryptErr:
  1411.     Lea    DC_CryptErr_EasyT,a0
  1412.     Jmp    ppLoadData_Err
  1413.     ppLD_PassErr:
  1414.     Lea    DC_PassErr_EasyT,a0
  1415.     Jmp    ppLoadData_Err
  1416.     ppLD_UnknownPP:
  1417.     Lea    DC_UnknownPPErr_EasyT,a0
  1418.     Jmp    ppLoadData_Err
  1419.     ppLD_EmptyErr:
  1420.     Lea    DC_EmptyErr_EasyT,a0
  1421. ;!!    Jmp    ppLoadData_Err
  1422.     ppLoadData_Err:
  1423.     Bsr    EasyRequest_Com
  1424.     Jmp    DC_End
  1425.     ppLoadData_Ok:            ; pas d'erreur, on continue
  1426.  
  1427.     Move.l    GadtoolsBase,a6
  1428.     Lea    WorkingGadgets,a0
  1429.     Move.l    8*4(a0),a0        ; Source Gadget
  1430.     Move.l    WorkingWnd,a1        ; Struct Window en a1
  1431.     Suba.l    a2,a2            ; Req = 0
  1432.     Lea    WriteNumberTags,a3    ; Tags en a3
  1433.     Move.l    Len_,WNT_Number        ; Longueur du fichier
  1434.     Jsr    GT_SetGadgetAttrsA(a6)    ; Afficher longueur décompacté
  1435.  
  1436.     Bsr    GetWorkingMessage    ; On vérifie si gadget appuyé.
  1437.     Cmp.b    #4,Working_UserResponse
  1438.     Beq    DC_Skip2
  1439.     Cmp.b    #5,Working_UserResponse
  1440.     Beq    DC_Stop2
  1441.  
  1442.     Bsr    OpenSaveFile        ; Ouvrir le fichier pour sauver
  1443.  
  1444.     Cmp.l    #0,FileHandle        ; Ouverture réussie ?
  1445.     Bne.s    DC_OpenSaveFile_Ok    ; Oui, on continue
  1446.     Lea    OpenWriteErr_EasyT,a0
  1447.     Bsr    EasyRequest_Com        ; Non, on avertit l'utilisateur
  1448.     Move.l    DosBase,a6
  1449.     Move.l    FileHandle,d1
  1450.     Jsr    Close(a6)
  1451.     Move.l    FileNameBuffer,d1
  1452.     Jsr    DeleteFile(a6)
  1453.     Jmp    DC_End1            ; Libérer la mémoire et continuer
  1454.     DC_OpenSaveFile_Ok:        ; Overture Ok, on continue
  1455.  
  1456.     Move.l    #Working_SavingT,WTT_Text; GTTX_Text  =  Adresse du texte
  1457.     Bsr    SetWorkingGad5Attrs
  1458.  
  1459.     Move.l    DosBase,a6
  1460.     Move.l    FileHandle,d1
  1461.     Move.l    Buffer_,d2
  1462.     Move.l    Len_,d3            ; On écrit le contenu du tampon
  1463.     Jsr    Write(a6)        ; décompacté
  1464.     Move.l    d0,d4
  1465.     Move.l    FileHandle,d1
  1466.     Jsr    Close(a6)        ; Fermer le fichier
  1467.     Cmp.l    Len_,d4            ; Ecriture Ok ?
  1468.     Beq.s    DC_Write_Ok        ; Oui, continue
  1469.     Move.l    FileNameBuffer,d1
  1470.     Jsr    DeleteFile(a6)        ; Effacer le fichier
  1471.     Lea    WriteErr_EasyT,a0
  1472.     Bsr    EasyRequest_Com        ; On avertit l'utilisateur
  1473. ;!!    Jmp    DC_End1            ; Libérer la mémoire et continuer
  1474.     DC_Write_Ok:
  1475.  
  1476.     DC_End1:
  1477.     Move.l    ExecBase,a6
  1478.     Move.l    Buffer_,a1        ; Adresse du buffer
  1479.     Move.l    Len_,d0            ; Longueur décomp
  1480.     Jsr    FreeMem(a6)        ; Libérer tampon décomp
  1481.     DC_End:
  1482.     Rts
  1483.  
  1484.  
  1485.     DC_Skip_Com:
  1486.     Move.l    #Working_StopT,WTT_Text    ; GTTX_Text = Adresse du texte
  1487.     Bsr    SetWorkingGad5Attrs
  1488.     Rts
  1489.     DC_Stop_Com:
  1490.     Bsr    DC_Skip_Com
  1491.     Move.l    FileNumber,FileCount    ; Dernier fichier traité
  1492.     Subq.l    #8,FileCount
  1493.     Rts
  1494.     DC_Skip1:
  1495.     Bsr    DC_Skip_Com
  1496.     Jmp    DC_End            ; Fichier suivant
  1497.     DC_Stop1:
  1498.     Bsr    DC_Stop_Com
  1499.     Jmp    DC_End            ; Terminer
  1500.     DC_Skip2:
  1501.     Bsr    DC_Skip_Com
  1502.     Jmp    DC_End1            ; Traitement terminé
  1503.     DC_Stop2:
  1504.     Bsr    DC_Stop_Com
  1505.     Jmp    DC_End1            ; Libérer la mémoire et terminer
  1506.  
  1507.  
  1508. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1509. *                                    *
  1510. *  FUNCTION:                                *
  1511. *    SetWorkingGad5Attrs:                        *
  1512. *        Remplace les nombreux appel à SetGadgetsAttrsA pour    *
  1513. *        le Gadget 5 de l'interface Working.            *
  1514. *  INPUT:                                *
  1515. *    SetWorkingGad5Attrs:                        *
  1516. *        WriteTextTags->WTT_Text = APTR sur le texte        *
  1517. *        WorkingWnd        =                 *
  1518. *        WorkingGadgets        =                 *
  1519. *                                    *
  1520. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1521.  
  1522.  
  1523. SetWorkingGad5Attrs:
  1524.     Move.l    GadtoolsBase,a6
  1525.     Lea    WorkingGadgets,a0
  1526.     Move.l    5*4(a0),a0        ; Status Gadget
  1527.     Lea    WriteTextTags,a3    ; Tags en a3
  1528.     Move.l    WorkingWnd,a1        ; Struct Window en a1
  1529.     Suba.l    a2,a2            ; Req = 0
  1530.     Jsr    GT_SetGadgetAttrsA(a6)    ; Afficher nom du fichier
  1531.     Rts
  1532.  
  1533.  
  1534. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1535. *                                    *
  1536. *  DESCRIPTION:                                *
  1537. *    FreeFileNameBuffer:                        *
  1538. *        Remplace les nombreuses routines qui libère le        *
  1539. *        tampon FileNameBuffer                    *
  1540. *  INPUT:                                *
  1541. *        FileNameBuffer    =  APTR sur le tampon            *
  1542. *        FileNameBufferL    =  Longueur du tampon            *
  1543. *  OUTPUT:                                *
  1544. *                                    *
  1545. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1546.  
  1547.  
  1548. FreeFileNameBuffer:
  1549.     Move.l    ExecBase,a6
  1550.     Move.l    FileNameBuffer,a1    ; Adresse du tampon
  1551.     Move.l    #FileNameBufferL,d0    ; Longueur
  1552.     Jsr    FreeMem(a6)
  1553.     Move.l    #0,FileNameBuffer    ; FileNameBuffer vide
  1554.     Rts
  1555.  
  1556.  
  1557. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1558. *                                    *
  1559. *  DESCRIPTION:                                *
  1560. *    OpenSaveFile:                            *
  1561. *        Ouvre le fichier de sauvegarde.  Tient compte des    *
  1562. *        preferences de l'utilisateur.                *
  1563. *  INPUT:                                *
  1564. *        FileNameBuffer    =  APTR sur le nom du fichier avec path    *
  1565. *        FileName    =  APTR sur le nom du fichier        *
  1566. *  OUTPUT:                                *
  1567. *        FileHandle    =  Gestionnaire de fichier  ou  0    *
  1568. *                                    *
  1569. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1570.  
  1571.  
  1572. OpenSaveFile:
  1573.     Move.l    ConfigBuffer0,a0
  1574.     Tst.b    CP_Config_UseAltPath(a0); Utiliser AltPath ?
  1575.     Beq.L    OSF_UseNormalBuf    ; Non, on OverWrite le fichier
  1576.  
  1577.     Move.l    ExecBase,a6
  1578.     Move.l    #FileNameBufferL,d0    ; 256 Bytes
  1579.     Move.l    #$1,d1            ; PublicMem
  1580.     Jsr    AllocMem(a6)        ; Allouer un tampon
  1581.     Move.l    d0,OSF_FileNameBuffer    ; Buffer alloué
  1582.     Bne.s    OSF_AllocBuffer_Ok    ; Oui, on continue
  1583.     Move.l    #0,FileHandle        ; Non, pas d'ouverture de fichier
  1584.     Jmp    OSF_End            ; On termine.  Fichier pas ouvert.
  1585.     OSF_AllocBuffer_Ok:
  1586.  
  1587.     Move.l    ConfigBuffer0,a0    ; Source en a0
  1588.     Adda.l    #CP_Config_AltPath,a0
  1589.     Move.l    d0,a1            ;!!  Dest en a1
  1590.     Move.l    #FileNameBufferL,d0    ; Longueur à copier en d0
  1591.     Jsr    CopyMem(a6)
  1592.  
  1593.     Move.l    DosBase,a6
  1594.     Move.l    OSF_FileNameBuffer,d1    ; Dir + destination
  1595.     Move.l    FileName,d2        ; Fichier
  1596.     Move.l    #FileNameBufferL,d3    ; Longueur à ne pas dépasser
  1597.     Jsr    AddPart(a6)        ; Rassembler le dir et le fichier
  1598.     Tst.l    d0            ; Assemblage Ok ?  (BOOLEAN)
  1599.     Bne.s    OSF_AddPart_Ok        ; Oui, on continue
  1600.     Move.l    #0,FileHandle        ; Non, fichier non ouvert
  1601.     Jmp    OSF_End1        ; Désallouer le buffer et quitter
  1602.     OSF_AddPart_Ok:
  1603.  
  1604.     Move.l    OSF_FileNameBuffer,d1    ; Pointeur sur le nom pour Open()
  1605.     Bsr    OSF_OpenFile        ; Ouvrir le fichier
  1606.     Jmp    OSF_End1        ; Désallouer le buffer et quitter
  1607.  
  1608. OSF_UseNormalBuf:
  1609.     Move.l    FileNameBuffer,d1    ; Pointeur sur le nom pour Open()
  1610.     Bsr    OSF_OpenFile        ; Ouvrir le fichier
  1611.     Jmp    OSF_End            ; Quitter
  1612.  
  1613.     OSF_OpenFile:
  1614.     Move.l    DosBase,a6
  1615.     Move.l    #1006,d2        ; Mode_NewFile
  1616.     Jsr    Open(a6)        ; Routine d'ouverture du fichier
  1617.     Move.l    d0,FileHandle        ; en écriture.
  1618.     Rts
  1619.  
  1620. OSF_End1:
  1621.     Move.l    ExecBase,a6
  1622.     Move.l    OSF_FileNameBuffer,a1    ; Tampon
  1623.     Move.l    #FileNameBufferL,d0    ; Longueur
  1624.     Jsr    FreeMem(a6)        ; Libérer le tampon
  1625. OSF_End:
  1626.     Rts                ; Quitter
  1627.  
  1628.  
  1629. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1630. *                                    *
  1631. *  FUNCTION:                                *
  1632. *    EasyRequest_Com:                        *
  1633. *        Remplace les fréquents appel à                *
  1634. *        Intuition/EasyRequestArgs() avec des valeurs pas défaut    *
  1635. *  INPUT:                                *
  1636. *    EasyRequest_Com:                        *
  1637. *        a0.l        =  APTR sur le Text du Requester    *
  1638. *  OUTPUT:                                *
  1639. *    EasyRequest_Com:                        *
  1640. *                                    *
  1641. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1642.  
  1643.  
  1644. EasyRequest_Com:
  1645.     Move.l    IntuitionBase,a6
  1646.     Lea    Def_EasyStruct,a1    ; Structure par défaut
  1647.     Move.l    a0,12(a1)        ; EasyStruct->ES_Text
  1648.     Suba.l    a2,a2            ; IDCMP_Ptr = 0
  1649.     Suba.l    a3,a3            ; ArgList = 0
  1650.     Suba.l    a0,a0            ; Window = Default
  1651.     Jsr    EasyRequestArgs(a6)    ; Avertir
  1652.     Rts
  1653.  
  1654.  
  1655. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1656. *                                    *
  1657. *  DESCRIPTION:                                *
  1658. *    ConfigPanel:                            *
  1659. *        S'occupe intégralement de la configuration du pgm    *
  1660. *        Sauve les résultats et traite les erreurs.        *
  1661. *  INPUT:                                *
  1662. *    ReplyMessage_Lock    =  1 = Oui pour rendre l'AppMessage    *
  1663. *  OUTPUT:                                *
  1664. *                                    *
  1665. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1666.  
  1667.  
  1668. ConfigPanel:
  1669.     Move.l    ExecBase,a6
  1670.     Move.l    #$10001,d1
  1671.     Move.l    #ConfigBufferL,d0    ; Allouer un tampon pour la config
  1672.     Jsr    AllocMem(a6)
  1673.     Move.l    d0,ConfigBuffer        ; Buffer ok ?
  1674.     Beq.L    ConfigPanel_Err_0    ; Non, quitter le ConfigPanel
  1675.  
  1676.     Move.l    ConfigBuffer0,a0    ; Les deux tampons sont identiques
  1677.     Move.l    ConfigBuffer,a1        ; Dest
  1678.     Move.l    #ConfigBufferL,d0    ; Longueur
  1679.     Jsr    CopyMem(a6)
  1680.  
  1681.     Move.l    ConfigBuffer,a0        ; !!!!
  1682.     Move.b    #1,CP_Config_Version(a0); Version de AppPP
  1683.     Move.b    CP_Config_UseAltPath(a0),CGT_Check; Etat du CHECKBOX
  1684.     Move.b    CP_Config_Efficiency(a0),CGT_Efficiency; Modifier la TagValue
  1685.     Move.b    CP_Config_Buffer(a0),CGT_Buffer; Modifier la TagValue
  1686.     Move.b    CP_Config_Effect(a0),CGT_Effect; Modifier la TagValue
  1687.     Adda.l    #CP_Config_AltPath,a0
  1688.     Move.l    a0,CGT_TEXT        ; TagValue du TEXT  (APTR)
  1689.  
  1690.     Move.b    #3,GUI_
  1691.     Bsr    SetupScreen_
  1692.     Tst.l    d0
  1693.     Bne.L    ConfigPanel_Err_1
  1694.     Move.w    #ConfigLeft,Left    ; Ouvrir l'interface Config.
  1695.     Move.w    #ConfigTop,Top
  1696.     Move.w    #ConfigWidth,Width
  1697.     Move.w    #ConfigHeight,Height
  1698.     Bsr    OpenWindow_
  1699.     Move.l    Wnd,ConfigWnd
  1700.     Tst.l    d0
  1701.     Bne.L    ConfigPanel_Err_1
  1702.  
  1703.     Move.l    #InverseBevelbox,Bevelbox_Taglist
  1704.     Move.w    #Config0_Top,BevelTop
  1705.     Move.w    #Config0_Left,BevelLeft
  1706.     Move.w    #Config0_Width,BevelWidth
  1707.     Move.w    #Config0_Height,BevelHeight
  1708.     Bsr    Render1
  1709.  
  1710. CP_WaitGadget:
  1711.     Move.b    #3,GUI_
  1712.     Move.b    #$ff,UserResponse
  1713.     Move.l    ConfigWnd,Wnd
  1714.     Bsr    WaitMessages        ; Attendre pression d'un gadget
  1715.     Move.w    Code,d1
  1716.     Move.w    d1,Config_Code
  1717.     Move.l    ConfigBuffer,a0        ; Stockage de code
  1718.     Move.b    UserResponse,Config_UserResponse; N° du gadget + 1
  1719.     Move.l    ExecBase,a6
  1720.  
  1721.     Move.b    Config_UserResponse,d0
  1722.     Cmp.b    #1,d0            ; CHECKBOX
  1723.     Beq.s    CP_Act1
  1724.     Cmp.b    #2,d0            ; CYCLE Efficiency
  1725.     Beq.s    CP_Act2
  1726.     Cmp.b    #3,d0            ; CYCLE Buffer
  1727.     Beq.s    CP_Act3
  1728.     Cmp.b    #4,d0            ; CYCLE Effect
  1729.     Beq.s    CP_Act4
  1730.     Cmp.b    #5,d0            ; BUTTOM Save
  1731.     Beq.s    CP_Act5
  1732.     Cmp.b    #6,d0            ; BUTTON Use
  1733.     Beq.L    CP_Act6
  1734.     Cmp.b    #7,d0            ; BUTTON Cancel
  1735.     Beq.L    CP_Act7
  1736.     Cmp.b    #8,d0            ; BUTTON Quit
  1737.     Beq.L    CP_Act8
  1738.     Cmp.b    #9,d0            ; TEXT
  1739.     Beq.L    CP_Act9
  1740.     Cmp.b    #10,d0            ; BUTTON Get
  1741.     Beq.L    CP_Act10
  1742.     Cmp.b    #11,d0            ; BUTTON About
  1743.     Beq.L    CP_Act11
  1744.  
  1745.  
  1746. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1747. *   Utilise-t-on le chemin alternatif?  Ecrit dans le tampon.   * * * * *
  1748. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1749.  
  1750. CP_Act1:            ; CHECKBOX
  1751.     Eor.b    #%1,CP_Config_UseAltPath(a0); Inverser TRUE/FALSE dans Config
  1752.     Eor.b    #%1,CGT_Check        ; TRUE/FASLE du TagValue du CHECKBOX
  1753.     Jmp    CP_ActF
  1754.  
  1755.  
  1756. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1757. *   Choix de l'efficacité. On écrit le n° au bon endroit dans le buffer *
  1758. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1759.  
  1760. CP_Act2:            ; CYCLE Efficiency
  1761.     Move.b    d1,CP_Config_Efficiency(a0); Code dans ConfigBuffer
  1762.     Jmp    CP_ActF
  1763.  
  1764.  
  1765. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1766. *   Choix du tampon. On écrit le n° au bon endroit dans le buffer.  * * *
  1767. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1768.  
  1769. CP_Act3:            ; CYCLE Buffer
  1770.     Move.b    d1,CP_Config_Buffer(a0)    ; Code dans ConfigBuffer
  1771.     Jmp    CP_ActF
  1772.  
  1773.  
  1774. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1775. *   Choix de l'effet. On écrit le n° au bon endroit dans le buffer  * * *
  1776. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1777.  
  1778. CP_Act4:            ; CYCLE Effect
  1779.     Move.b    d1,CP_Config_Effect(a0)    ; Code dans ConfigBuffer
  1780.     Jmp    CP_ActF
  1781.  
  1782.  
  1783. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1784. *  Sauve les préférences dans Env et Envarc.  * * * * * * * * * * * * * *
  1785. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1786.  
  1787. CP_Act5:            ; BUTTON Save
  1788.                     ; Copier le 1er tampon dans le 2ème
  1789. ;!!    Move.l    ConfigBuffer,a0        ; Source
  1790.     Move.l    ConfigBuffer0,a1    ; Destination
  1791.     Move.l    #ConfigBufferL,d0    ; Longueur à copier
  1792.     Jsr    CopyMem(a6)
  1793.  
  1794.     Move.l    DosBase,a6
  1795.     Move.l    #ConfigFileName0,d1
  1796.     Move.l    #1006,d2
  1797.     Jsr    Open(a6)        ; Ouvrir le fichier config dans Env:
  1798.     Move.l    d0,ConfigFileName0_FH    ; Ouverture Ok ?
  1799.     Bne.s    CP_Act5_OpenRamConfig_Ok; Oui, on continue
  1800.     Lea    SaveEnvConfigErr_EasyT,a0
  1801.     Bsr    EasyRequest_Com
  1802.     Jmp    CP_Act5_OpenRamConfig_Err; et on ne sauve pas le fichier.
  1803.     CP_Act5_OpenRamConfig_Ok:    
  1804.     Move.l    d0,d1            ;!!
  1805.     Move.l    ConfigBuffer0,d2
  1806.     Move.l    #ConfigBufferL,d3    ; Ecrire le tampon
  1807.     Jsr    Write(a6)
  1808.     Move.l    d0,d4            ; Nb de bytes écrits en d4
  1809.     Move.l    ConfigFileName0_FH,d1
  1810.     Jsr    Close(a6)        ; Fermer le fichier
  1811.     Cmp.l    #ConfigBufferL,d4    ; Ecriture Ok ?
  1812.     Beq.s    CP_Act5_WriteRamConfig_Ok; Oui, on continue
  1813.     Move.l    #ConfigFileName0,d1    ; Non, Effacer le fichier
  1814.     Jsr    DeleteFile(a6)
  1815.     Lea    SaveEnvConfigErr_EasyT,a0
  1816.     Bsr    EasyRequest_Com
  1817.     CP_Act5_WriteRamConfig_Ok:
  1818.     CP_Act5_OpenRamConfig_Err:
  1819.  
  1820.     Move.l    DosBase,a6
  1821.     Move.l    #1006,d2
  1822.     Move.l    #ConfigFileName1,d1    ; Ouvrir le fichier Config dans EnvArc:
  1823.     Jsr    Open(a6)
  1824.     Move.l    d0,ConfigFileName0_FH    ; Ouverture Ok ?
  1825.     Bne.s    CP_Act5_OpenDiskConfig_Ok; Oui, on continue
  1826.     Lea    SaveEnvarcConfigErr_EasyT,a0
  1827.     Bsr    EasyRequest_Com
  1828.     Jmp    CP_Act5_OpenDiskConfig_Err
  1829.     CP_Act5_OpenDiskConfig_Ok:
  1830.     Move.l    d0,d1            ;!!
  1831.     Move.l    ConfigBuffer0,d2
  1832.     Move.l    #ConfigBufferL,d3
  1833.     Jsr    Write(a6)        ; Ecrire le tampon dans le fichier
  1834.     Move.l    d0,d4            ; Nb de bytes écrits en d4
  1835.     Move.l    ConfigFileName0_FH,d1    ; Fermer le fichier
  1836.     Jsr    Close(a6)
  1837.     Cmp.l    #ConfigBufferL,d4    ; Ecriture Ok ?
  1838.     Beq.s    CP_Act5_WriteDiskConfig_Ok; Oui, on continue
  1839.     Move.l    #ConfigFileName1,d1    ; Non, effacer le fichier
  1840.     Jsr    DeleteFile(a6)
  1841.     Lea    SaveEnvarcConfigErr_EasyT,a0
  1842.     Bsr    EasyRequest_Com
  1843.     CP_Act5_WriteDiskConfig_Ok:
  1844.     CP_Act5_OpenDiskConfig_Err:
  1845.  
  1846.     Move.l    ConfigWnd,Wnd
  1847.     Bsr    GM_RepIMessage
  1848.     Bsr    IMessageLoop        ; Traiter tous les messages
  1849.     Bsr    CloseWindow_        ; Fermer fenêtre et libérer
  1850.     Bsr    CloseDownScreen_    ; gadgets
  1851.     Bsr    CP_FreeConfigBuffer    ; Libérer ConfigBuffer
  1852.     Bsr    CP_Evtl_ReplyMessage    ; Rendre l'éventuel AppMessage
  1853.     Jmp    GetAppMessage        ; AppMessage Suivant
  1854.  
  1855.  
  1856. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1857. *  Sauve les préferences dans un tampon. (pas dans un fichier)  * * * * *
  1858. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1859.  
  1860. CP_Act6:            ; BUTTON Use
  1861.                     ; Copier le 1er tampon dans le 2ème
  1862. ;!!    Move.l    ConfigBuffer,a0        ; Source
  1863.     Move.l    ConfigBuffer0,a1    ; Destination
  1864.     Move.l    #ConfigBufferL,d0    ; Longueur à copier
  1865.     Jsr    CopyMem(a6)
  1866.  
  1867.     Move.l    ConfigWnd,Wnd
  1868.     Bsr    GM_RepIMessage        ; Rendre le Message au port
  1869.     Bsr    IMessageLoop        ; Traiter tous les messages
  1870.     Bsr    CloseWindow_        ; Fermer fenêtre et libére 
  1871.     Bsr    CloseDownScreen_    ; gadgets
  1872.     Bsr    CP_FreeConfigBuffer    ; Libérer ConfigBuffer
  1873.     Bsr    CP_Evtl_ReplyMessage    ; Rendre l'éventuel AppMessage
  1874.     Jmp    GetAppMessage        ; AppMessage Suivant
  1875.  
  1876.  
  1877. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1878. *  Ferme l'interface Config sans tenir compte des changements.  * * * * *
  1879. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1880.  
  1881. CP_Act7:            ; BUTTON Cancel
  1882.     Move.l    ConfigWnd,Wnd
  1883.     Bsr    GM_RepIMessage        ; Rendre le Message sur le port
  1884.     Bsr    IMessageLoop        ; Traiter tous les messages
  1885.     Bsr    CloseWindow_        ; Fermer fenêtre et libérer
  1886.     Bsr    CloseDownScreen_    ; gadgets
  1887.     Bsr    CP_FreeConfigBuffer    ; Libérer tampon ConfigBuffer
  1888.     Bsr    CP_Evtl_ReplyMessage    ; Rendre l'éventuel AppMessage
  1889.     Jmp    GetAppMessage        ; AppMessage suivant
  1890.  
  1891.  
  1892. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1893. *  Termine le programme.  * * * * * * * * * * * * * * * * * * * * * * * *
  1894. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1895.  
  1896. CP_Act8:            ; BUTTON Quit
  1897.     Move.l    ConfigWnd,Wnd
  1898.     Bsr    GM_RepIMessage        ; 
  1899.     Bsr    IMessageLoop
  1900.     Bsr    CloseWindow_        ; Fermer fenêtre et libérer
  1901.     Bsr    CloseDownScreen_    ; gadgets
  1902.     Bsr    CP_FreeConfigBuffer    ; Libérer le tampon ConfigBuffer
  1903.     Bsr    CP_Evtl_ReplyMessage    ; Rendre l'éventuel AppMessage
  1904.     Jmp    End_            ; Terminer le programme
  1905.  
  1906.  
  1907. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1908. *  On ne peut normalement pas recevoir de message d'un Text.  * * * * * *
  1909. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1910.  
  1911. CP_Act9:            ; TEXT
  1912.     Jmp    CP_ActF
  1913.  
  1914.  
  1915. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1916. *  Execute la requête de fichier pour le chemin AltPath.  * * * * * * * *
  1917. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1918.  
  1919. CP_Act10:            ; BUTTON Get
  1920.     Lea    AslName,a1    
  1921.     Moveq    #36,d0
  1922.     Move.l    ExecBase,a6
  1923.     Jsr    OpenLibrary(a6)        ; Ouvrir la librairie Asl
  1924.     Move.l    d0,AslBase    
  1925.     Beq.L    CP_NoAsl        ; Ouverture a échoué
  1926.  
  1927.     Move.l    d0,a6            ;!!
  1928.     Moveq    #0,d0            ; Type = File Requester
  1929.     Lea    Config_AslPTags,a1
  1930.     Jsr    AllocAslRequest(a6)    ; Alloue la structure File Request
  1931.     Move.l    d0,AslRequestStruct
  1932.     Beq.s    CP_NoRequest        ; Structure non-disponible
  1933.  
  1934.     Move.l    d0,a0            ;!!  Request en a0
  1935.     Lea    Config_AslPTags,a1
  1936.     Jsr    AslRequest(a6)        ; Affiche la requête
  1937.     Tst.l    d0            ; Résultat ( 0L = Cancel|Fail )
  1938.     Beq.s    CP_CancelRequester
  1939.                     ; Utiliser les résultats
  1940.     Move.l    AslRequestStruct,a0
  1941.     Move.l    rf_Dir(a0),a1        ; adresse du nom du répertoire
  1942.     Move.l    ConfigBuffer,a0
  1943.     Adda.l    #CP_Config_AltPath,a0    ; ConfigBuffer->AltPath
  1944.     CP_Act10_CopyString:
  1945.     Move.b    (a1)+,(a0)+        ; Copier la chaîne du nom de fichier
  1946.     Tst.b    (a1)            ;  jusqu'à 0
  1947.     Bne.s    CP_Act10_CopyString
  1948.     Move.b    (a1),(a0)        ; Copier le 0
  1949.  
  1950.     Move.l    GadtoolsBase,a6
  1951.     Move.l    ConfigGadgets,a0    ; 1er gadget (TEXT)
  1952.     Move.l    ConfigWnd,a1
  1953.     Move.l    #0,a2
  1954.     Lea    WriteTextTags,a3    ; Afficher le nouveau Text
  1955.     Move.l    a3,a4            ; Pointeur sur les Tags
  1956.     Addq.l    #4,a4            ; Pointeur sur la donnée du tag
  1957.     Move.l    ConfigBuffer,a5        ; Pointeur sur la config
  1958.     Adda.l    #CP_Config_AltPath,a5    ; Pointeur sur le nom du fichier
  1959.     Move.l    a5,(a4)            ; Adresse du nom dans la donnée du Tag
  1960.     Jsr    GT_SetGadgetAttrsA(a6)
  1961.  
  1962.     CP_CancelRequester:        ; Cancel ou Fail
  1963.     Move.l    AslBase,a6
  1964.     Move.l    AslRequestStruct,a0    ; Libère la structure
  1965.     Jsr    FreeAslRequest(a6)
  1966.     CP_NoRequest:            ; Pas de structure Request
  1967.     Move.l    ExecBase,a6
  1968.     Move.l    AslBase,a1
  1969.     Jsr    CloseLibrary(a6)
  1970.     CP_NoAsl:            ; Ouverture de Asl a échoué
  1971.     Jmp    CP_ActF            ; Terminer
  1972.  
  1973.  
  1974. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1975. *  Ouvre l'interface About. * * * * * * * * * * * * * * * * * * * * * * *
  1976. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  1977.  
  1978. CP_Act11:            ; BUTTON About
  1979.     Move.b    #4,GUI_
  1980.     Move.w    #AboutLeft,Left
  1981.     Move.w    #AboutTop,Top
  1982.     Move.w    #AboutWidth,Width
  1983.     Move.w    #AboutHeight,Height
  1984.     Bsr    OpenWindow_
  1985.     Move.l    Wnd,AboutWnd
  1986.  
  1987.     Move.l    #NormalBevelbox,Bevelbox_Taglist
  1988.     Move.w    #About0_Top,BevelTop
  1989.     Move.w    #About0_Left,BevelLeft
  1990.     Move.w    #About0_Width,BevelWidth
  1991.     Move.w    #About0_Height,BevelHeight
  1992.     Bsr    Render1
  1993.  
  1994.     Move.b    #$ff,UserResponse
  1995. ;    Move.l    AboutWnd,Wnd
  1996.     Bsr    WaitMessages
  1997. ;    Move.b    UserResponse,About_UserResponse
  1998. ;    Move.l    AboutWnd,Wnd
  1999.     Bsr    IMessageLoop
  2000.     Bsr    CloseWindow_
  2001. ;!!    Jmp    CP_ActF            ; Terminer
  2002.  
  2003. CP_ActF:
  2004.     Bsr    GM_RepIMessage        ; 
  2005.     Jmp    CP_WaitGadget        ; Attendre la pression d'un autre gadget
  2006.  
  2007.  
  2008. CP_FreeConfigBuffer:
  2009.     Move.l    ExecBase,a6
  2010.     Move.l    ConfigBuffer,a1
  2011.     Move.l    #ConfigBufferL,d0
  2012.     Jsr    FreeMem(a6)
  2013.     Rts
  2014.  
  2015. CP_Evtl_ReplyMessage:
  2016.     Tst.b    ReplyMessage_Lock
  2017.     Beq.s    CP_Evtl_ReplyMessageF
  2018.     Move.l    ExecBase,a6
  2019.     Move.l    Msg,a1
  2020.     Jsr    ReplyMsg(a6)
  2021.     CP_Evtl_ReplyMessageF:
  2022.     Rts
  2023.  
  2024. ConfigPanel_Err_1:
  2025.     Move.l    ConfigWnd,Wnd
  2026.     Bsr    IMessageLoop
  2027.     Bsr    CloseWindow_
  2028.     Bsr    CloseDownScreen_    ; Fermer fenêtre et libérer gadgets
  2029.     Bsr    CP_FreeConfigBuffer    ; Libérer le tampon de la config
  2030.  
  2031. ConfigPanel_Err_0:
  2032.     Tst.b    ReplyMessage_Lock
  2033.     Beq.s    CPErr_NoReplyMessage
  2034.     Move.l    ExecBase,a6
  2035.     Move.l    Msg,a1
  2036.     Jsr    ReplyMsg(a6)
  2037.     CPErr_NoReplyMessage:
  2038.     Jmp    GetAppMessage
  2039.  
  2040.             ; ComputeFont_Lock:    0  ->  Font des gadgets
  2041.             ;            1  ->  Font des textes
  2042.  
  2043.  
  2044. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2045. *                                    *
  2046. *  DESCRIPTION:                                *
  2047. *    GetWorkingMessage:                        *
  2048. *        Vérifie si un gadget de l'interface Working à été    *
  2049. *        appyué.                            *
  2050. *  INPUT:                                *
  2051. *  OUTPUT:                                *
  2052. *        UserResponse  =  Numéro du gadget appuyé + 1  ou  $ff    *
  2053. *                                    *
  2054. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2055.  
  2056.  
  2057. GetWorkingMessage:
  2058.     Move.l    WorkingWnd,Wnd
  2059.     Move.b    #$ff,UserResponse
  2060.     Bsr    GetMessage
  2061.     Move.b    UserResponse,Working_UserResponse
  2062.     Rts
  2063.  
  2064.  
  2065. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2066. *                                    *
  2067. *  DESCRIPTION:                                *
  2068. *    WaitMessages:                            *
  2069. *        Attend que l'utilisateur appuye un gadget et renvoie    *
  2070. *        le code correspondant.                    *
  2071. *    GetMessage:                            *
  2072. *        Renvoie le gadget appuyé, mais n'attend pas.        *
  2073. *        Retourne immédiatement.                    *
  2074. *    IMessageLoop:                            *
  2075. *        Va chercher tous les messages sur le port et renvoie    *
  2076. *        la réponse immédiatement.                *
  2077. *    GM_RepIMessage:                            *
  2078. *        Renvoie le message au port de la fenêtre        *
  2079. *  INPUT:                                *
  2080. *        Wnd        =  WindowPtr                *
  2081. *        UserResponse    =  $ff                    *
  2082. *    GM_RepIMessage:                            *
  2083. *        Gt_IMsg.l    =  Message reçu avec Gt_GetIMsg        *
  2084. *  OUTPUT:                                *
  2085. *    WaitMessages:                            *
  2086. *        UserResponse    =  Numéro du gadget + 1            *
  2087. *        Code        =  IMsg->Code                *
  2088. *    GetMessage:                            *
  2089. *        UserResponse    =  Numéro du gadget + 1  ou  $ff    *
  2090. *        Code        =  IMsg->Code                *
  2091. *    IMessageLoop:                            *
  2092. *        Message        =  Poiteur sur le port message        *
  2093. *                                    *
  2094. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2095.  
  2096.  
  2097. WaitMessages:                ; Attendre la reponse de l'utilisateur
  2098.     Move.b    #0,UserResponse
  2099.     Move.l    Wnd,a0
  2100.     Move.l    86(a0),a0
  2101.     Move.l    ExecBase,a6
  2102.     Jsr    WaitPort(a6)        ; On Attend un message sur le port
  2103.     Move.b    #0,UserResponse        ; Wait: UserResponse = 0
  2104.  
  2105. GetMessage:
  2106.     Move.l    Wnd,a0
  2107.     Move.l    86(a0),a0        ; L'attente est finie.
  2108.     Move.l    GadtoolsBase,a6
  2109.     Jsr    GT_GetIMsg(a6)        ; On prélève le message
  2110.     Move.l    d0,Gt_IMsg        ; Message
  2111.     Bne.s    TestIMessage_F        ; Réponse OK ? --> sauver réponse
  2112.                     ; Réponse pas OK.
  2113.     Cmp.b    #$ff,UserResponse    ; Message attendu ?
  2114.     Bne.s    WaitMessages        ; Oui, on retourne attendre.
  2115.     Beq.s    GM_IReturn        ; Non, on sort.
  2116.     TestIMessage_F:            ; Le message est OK.
  2117.  
  2118.     Move.l    d0,a0            ; Structure IMsg
  2119.     Move.l    20(a0),d1        ; IMsg->Class
  2120.     Move.w    24(a0),Code        ; IMsg->Code
  2121.     Move.l    28(a0),a0        ; IMsg->IAdress
  2122.     Moveq    #0,d0            
  2123.     Move.w    38(a0),d0        ; IMsg->IAdress->GadgetID
  2124.     Addq.b    #1,d0            ; Numéro du gadget  +  1
  2125.     Move.b    d0,UserResponse
  2126.  
  2127.     Btst    #2,d1            ; IDCMP_RefreshWindow
  2128.     Beq.s    WM_RefreshF        ; Non, on continue
  2129.     Move.l    GadToolsBase,a6        ; Oui, rafraîchir la fenêtre
  2130.     Move.l    Wnd,a0
  2131.     Jsr    GT_BeginRefresh(a6)
  2132.     Move.l    Wnd,a0
  2133.     Moveq    #1,d0            ; Complete = TRUE
  2134.     Jsr    GT_EndRefresh(a6)
  2135.     WM_RefreshF:    
  2136.  
  2137. GM_RepIMessage:
  2138.     Move.l    GadToolsBase,a6
  2139.     Move.l    Gt_IMsg,a1
  2140.     Jsr    GT_ReplyIMsg(a6)    ; On renvoie le message au port.
  2141.     Move.l    #0,Gt_IMsg
  2142.  
  2143.     GM_IReturn:
  2144.     Rts                ; On retourne
  2145.  
  2146.  
  2147. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2148. *  Prend les messages en boucle.  * * * * * * * * * * * * * * * * * * * *
  2149. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2150.  
  2151. IMessageLoop:                ; L'utilisateur a déjà répondu.
  2152.     Move.l    GadToolsBase,a6        ; On boucle jusqu'à plus de Msg
  2153.     Move.l    Wnd,a0
  2154.     Move.l    86(a0),a0        ; Window->UserPort
  2155.     Jsr    Gt_GetIMsg(a6)
  2156.     Move.l    d0,a1            ; Lorsqu'il y plus de message,
  2157.     Beq.s    IML_Return            ; on sort de la boucle.
  2158.     Jsr    Gt_ReplyIMsg(a6)
  2159.     Jmp    IMessageLoop
  2160. IML_Return:
  2161.     Rts
  2162.  
  2163.  
  2164. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2165. *                                    *
  2166. *  DESCRIPTION:                                *
  2167. *    End_:                                *
  2168. *        Termine le programme.  Désalloue tout pour quitter    *
  2169. *  INPUT:                                *
  2170. *  OUTPUT:                                *
  2171. *                                    *
  2172. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2173.  
  2174.  
  2175. End_:                    ; Fin.
  2176.  
  2177. End_4:
  2178.     Move.l    ExecBase,a6
  2179.     Move.l    ConfigBuffer0,a1
  2180.     Move.l    #ConfigBufferL,d0
  2181.     Jsr    FreeMem(a6)
  2182. End_3:
  2183.     Move.l    WorkbenchBase,a6
  2184.     Move.l    AppIcon,a0
  2185.     Jsr    RemoveAppIcon(a6)    ; On enléve l'AppIcon
  2186. End_2:
  2187.     Move.l    ExecBase,a6
  2188.     Move.l    AppMsgPort,a0
  2189.     Jsr    DeleteMsgPort(a6)    ; On ferme le message-port
  2190. End_1:
  2191.     Move.l    IconBase,a6
  2192.     Move.l    DiskObject,a0        ; Libération de la structure
  2193.     Jsr    FreeDiskObject(a6)    ; DiskObject
  2194. End:
  2195.     Move.l    ExecBase,a6
  2196.     Move.l    ppBase,a1
  2197.     Jsr    CloseLibrary(a6)
  2198.     Move.l    IntuitionBase,a1    ; On ferme toutes les
  2199.     Jsr    CloseLibrary(a6)    ; libraries.
  2200.     Move.l    GadtoolsBase,a1
  2201.     Jsr    CloseLibrary(a6)
  2202.     Move.l    DosBase,a1
  2203.     Jsr    CloseLibrary(a6)
  2204.     Move.l    WorkbenchBase,a1
  2205.     Jsr    CloseLibrary(a6)
  2206.     Move.l    IconBase,a1
  2207.     Jsr    CloseLibrary(a6)
  2208.  
  2209.     Move.l    WbMsg,a1        ; Rendre le Startup-Message
  2210.     Jsr    ReplyMsg(a6)
  2211. End_0:
  2212.     Move.l    Stack,a7
  2213. ;    Move.l    ReturnCode,d0        ; Pour le deboguage seulement.
  2214.     Rts                ; Fin du programme...
  2215.  
  2216.  
  2217. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2218. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2219. * *                                      * *
  2220. * *                                      * *
  2221. * *          * * * * * * * * * * * * * * * * * *              * *
  2222. * *         *  CODE GENERE PAR GADTOOLSBOX 2.0  *              * *
  2223. * *          * * * * * * * * * * * * * * * * * *              * *
  2224. * *                                      * *
  2225. * *                                      * *
  2226. * *       Il a été largement modifé afin de pouvoir supporter          * *
  2227. * *     plusieurs interfaces (question d'optimisation)  et pour      * *
  2228. * *    enlever un bug (rien de grave, uniquement de la cosmétique)    * *
  2229. * *                                      * *
  2230. * *    Malgré que GadtoolsBox souffre encore de pas mal de défauts    * *
  2231. * *   de jeunesse  et que le code source généré souffre de beaucoup   * *
  2232. * *       de manques que j'ai du combler (GadtoolsBox génère          * *
  2233. * *    l'interface au sens pûrement graphique du terme, mais ne      * *
  2234. * *     gère pas les gadgets),  il m'a permit de comprendre le          * *
  2235. * *   fonctionnement de la Gadtools.library  qui est le seul moyen    * *
  2236. * *   de programmer convenablement une interface graphique, à part    * *
  2237. * *    MUI, qui est vraiment le top (Même sur Macintosh, il n'y a     * *
  2238. * *              rien de comparable!)                  * *
  2239. * *                                      * *
  2240. * *   De toute façon,  un grand Merci à Jan van den Baard, l'auteur   * *
  2241. * *  de GadtoolsBox,  pous son immense service rendu à la communauté  * *
  2242. * *     Amiga.  Grâce à lui, donner une interface graphique à un     * *
  2243. * *     n'est, sur Amiga, plus un luxe, ni une perte de temps...     * *
  2244. * *                                      * *
  2245. * *                                      * *
  2246. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2247. *                                    *
  2248. *  DESCRIPTION:                                *
  2249. *    SetupScreen_:                            *
  2250. *        Fait un Intuition.library/LockPubScreen() afin        *
  2251. *        d'ouvrir la fenêtre sans risque et un            *
  2252. *        Gadtools.library/GetVisualInfo()            *
  2253. *    OpenWindow_:                            *
  2254. *        Ouvre la fenêtre en fonction des paramètres d'entrée    *
  2255. *        Crée les gadgets, dessine les bevelboxes et écrit les    *
  2256. *        textes en fonction des paramétres et d'une manière    *
  2257. *        Font-Adaptive                        *
  2258. *    CloseWindow_:                            *
  2259. *        Referme la fenêtre et libère les gadgets        *
  2260. *    CloseDownSreen_:                        *
  2261. *        Fait un Intuition.library/UnlockPubscreen()        *
  2262. *  INPUT:                                *
  2263. *    SetupScreen_:                            *
  2264. *    OpenWindow_:                            *
  2265. *        Width.w        =  Largeur de la fenêtre        *
  2266. *        Height.w    =  Hauteur de la fenêtre        *
  2267. *        Top.w        =  Distance du haut            *
  2268. *        Left.w        =  Distance de gauche            *
  2269. *        GUI_.b        =  Numéro d'interface            *
  2270. *        OffX.w        =  Offset de gauche (généralement nul)    *
  2271. *        OffY.w        =  Offset du haut (généralement nul)    *
  2272. *        Bevelbox_Taglist.l=Pointeur sur une Taglist        *
  2273. *    CloseWindow_:                            *
  2274. *        Wnd.l        =  Pointeur sur Window            *
  2275. *        GList.l        =  Pointeur sur la liste de gadget    *
  2276. *    CloseDownScreen_:                        *
  2277. *        VisualInfo.l    =                      *
  2278. *        Scr.l        =  Pointeur l'écran locké        *
  2279. *  OUTPUT:                                *
  2280. *    SetupScreen_:                            *
  2281. *        VisualInfo.l    =                      *
  2282. *        Scr.l        =  Pointeur sur l'écran locké        *
  2283. *    OpenWindow_:                            *
  2284. *        Wnd.l        =  Pointeur sur Window            *
  2285. *        GList.l        =  NULL                    *
  2286. *    CloseWindow_:                            *
  2287. *        Wnd.l        =  0                    *
  2288. *        GList.l        =  0                    *
  2289. *    CloseDownScreen_:                        *
  2290. *        Scr.l        =  0                    *
  2291. *        VisualInfo.l    =  0                    *
  2292. *                                    *
  2293. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2294.  
  2295.  
  2296. ComputeY:
  2297.     move.l    d1,-(sp)
  2298.     Cmp.b    #1,ComputeFont_Lock
  2299.     Beq.s    ComputeY_UseBuf2
  2300.     Move.w    FontY,d1
  2301.     Jmp    ComputeY_UseBuf1F
  2302.     ComputeY_UseBuf2:
  2303.     Move.w    FontY2,d1
  2304.     ComputeY_UseBuf1F:
  2305.     mulu    d1,d0
  2306.     addq.w    #6,d0
  2307.     Divu    #12,d0
  2308.     move.l    (sp)+,d1
  2309.     rts
  2310. ComputeX:
  2311.     Move.l    d1,-(sp)
  2312.     Cmp.b    #1,ComputeFont_Lock
  2313.     Beq.s    ComputeX_UseBuf2
  2314.     Move.w    FontX,d1
  2315.     Jmp    ComputeX_UseBuf1F
  2316.     ComputeX_UseBuf2:
  2317.     Move.w    FontX2,d1
  2318.     ComputeX_UseBuf1F:
  2319.     ComputeItX:
  2320.     mulu    d1,d0
  2321.     addq.w    #4,d0
  2322.     Divu    #8,d0
  2323.     move.l    (sp)+,d1
  2324.     rts
  2325.  
  2326. ComputeFont:
  2327.     Move.l    Scr,a1
  2328.     Lea    sc_RastPort(a1),a1
  2329.     Move.l    rp_Font(a1),a1
  2330.     Cmp.b    #1,ComputeFont_Lock
  2331.     Beq.s    ComputeFont_UseBuf2
  2332.     Move.l    #Attr,a0
  2333.     Move.l    a0,Font
  2334.     Move.w    tf_XSize(a1),FontX
  2335.     Move.w    tf_YSize(a1),FontY
  2336.     Jmp    ComputeFont_UseBuf1F
  2337.     ComputeFont_UseBuf2:
  2338.     Move.l    #Attr2,a0
  2339.     Move.l    a0,Font2
  2340.     Move.w    tf_XSize(a1),FontX2
  2341.     Move.w    tf_YSize(a1),FontY2
  2342.     ComputeFont_UseBuf1F:
  2343.     Move.l    0(a1),ta_Name(a0)        ; Remplace LN_NAME    ; move.l LN_NAME(a1),ta_Name(a0)
  2344.     Move.w    tf_YSize(a1),ta_YSize(a0)
  2345.     move.l  Scr,a0
  2346.     move.b  sc_WBorLeft(a0),d0
  2347.     ext.w   d0
  2348.     move.w  d0,OffX
  2349.     move.l  sc_Font(a0),a1
  2350.     move.w  ta_YSize(a1),d0
  2351.     addq.w  #1,d0
  2352.     add.b   sc_WBorTop(a0),d0
  2353.     move.w  d0,OffY
  2354.     tst.w   d2
  2355.     beq.s   ComputeFont_F
  2356.     tst.w   d3
  2357.     beq.s   ComputeFont_F
  2358.     move.w  d2,d0
  2359.     bsr     ComputeX
  2360.     add.w   OffX,d0
  2361.     add.b   sc_WBorRight(a0),d0
  2362.     cmp.w   sc_Width(a0),d0
  2363.     bhi.s   ComputeFont_UseTopaz
  2364.     move.w  d3,d0
  2365.     bsr     ComputeY
  2366.     add.w   OffY,d0
  2367.     add.b   sc_WBorBottom(a0),d0
  2368.     cmp.w   sc_Height(a0),d0
  2369.     bhi.s   ComputeFont_UseTopaz
  2370. ComputeFont_F:
  2371.     rts
  2372. ComputeFont_UseTopaz:
  2373.     move.l  Font,a0
  2374.     move.l  #TopazName,ta_Name(a0)
  2375.     move.w  #8,FontY
  2376.     move.w  #8,FontX
  2377.     move.w  #8,ta_YSize(a0)
  2378.     rts
  2379.  
  2380.  
  2381. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2382. *  LockPubScreen et alloue VisualInfo.  * * * * * * * * * * * * * * * * *
  2383. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2384.  
  2385. SetupScreen_:
  2386.     movem.l d1-d3/a0-a2/a6,-(sp)
  2387.     move.l  IntuitionBase,a6
  2388.     move.l  PubScreenName,a0
  2389.     jsr     LockPubScreen(a6)        ; Empêche la fermeture de l'écran
  2390.     move.l  d0,Scr
  2391.     tst.l   d0
  2392.     beq.s   SError            ; Screen Error
  2393.     moveq   #0,d2
  2394.     moveq   #0,d3
  2395.     Move.b    #0,ComputeFont_Lock    ; Texte des gadgets
  2396.     bsr     ComputeFont
  2397.     move.l  Scr,a0
  2398.     move.l  GadToolsBase,a6
  2399.     lea.l   TD,a1
  2400.     jsr     GetVisualInfoA(a6)        ; Sert à remplir NewGadget
  2401.     move.l  d0,VisualInfo
  2402.     tst.l   d0
  2403.     beq.s   VError            ; Visual Error
  2404.     moveq   #0,d0            ; 0 = ok, on continue
  2405. SetupScreen__Done:
  2406.     movem.l (sp)+,d1-d3/a0-a2/a6
  2407.     rts
  2408. SError:
  2409.     moveq   #1,d0            ; Screen Error : 1 en d0
  2410.     bra.s   SetupScreen__Done
  2411. VError:
  2412.     moveq   #2,d0            ; Visual Error : 2 en d0
  2413.     bra.s   SetupScreen__Done
  2414.  
  2415.  
  2416. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2417. *  UnlockPubScreen et libère la structure VisualInfo  * * * * * * * * * *
  2418. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2419.  
  2420. CloseDownScreen_:
  2421.     movem.l d0-d1/a0-a1/a6,-(sp)
  2422.     move.l  IntuitionBase,a6
  2423.     move.l  getImage,a0
  2424.     cmpa.l  #0,a0
  2425.     beq.s   NoObj
  2426.     jsr     DisposeObject(a6)
  2427. NoObj:
  2428.     move.l  getClass,a0
  2429.     cmpa.l  #0,a0
  2430.     beq.s   NoCls
  2431.     jsr     FreeClass(a6)
  2432. NoCls:
  2433.     move.l  GadToolsBase,a6
  2434.     move.l  VisualInfo,a0
  2435.     cmpa.l  #0,a0
  2436.     beq.s   NoVisualInfo
  2437.     jsr     FreeVisualInfo(a6)
  2438.     move.l  #0,VisualInfo
  2439. NoVisualInfo:
  2440.     move.l  IntuitionBase,a6
  2441.     suba.l  a0,a0
  2442.     move.l  Scr,a1
  2443.     cmpa.l  #0,a1
  2444.     beq.s   NoScreen
  2445.     jsr     UnlockPubScreen(a6)
  2446.     move.l  #0,Scr
  2447. NoScreen:
  2448.     movem.l (sp)+,d0-d1/a0-a1/a6
  2449.     rts
  2450.  
  2451.  
  2452. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2453. *  Affiche les textes en boucle.  * * * * * * * * * * * * * * * * * * * *
  2454. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2455.  
  2456. Render0:
  2457.     movem.l d0-d5/a0-a2/a6,-(sp)
  2458.     move.l  Wnd,a0
  2459.     move.w  Width,d2
  2460.     move.w  Height,d3
  2461.     Move.b    #1,ComputeFont_Lock
  2462.     bsr     ComputeFont
  2463.     moveq   #0,d3
  2464. ;    Cmp.b    #1,GUI_
  2465. ;    Beq.s    Render0GUI_1
  2466. ;    Cmp.b    #2,GUI_
  2467. ;    Beq.s    Render0GUI_2
  2468. ;    Cmp.b    #3,GUI_
  2469. ;    Beq.s    Render0GUI_3
  2470. ;    Cmp.b    #4,GUI_
  2471. ;    Beq.s    Render0GUI_4
  2472. ;    Render0GUI_1:
  2473. ;    Lea.l    CrunchText0,a2
  2474. ;    Jmp    Render0GUI_F
  2475. ;    Render0GUI_2:
  2476. ;    Lea.l    WorkingText0,a2
  2477. ;    Jmp    Render0GUI_F
  2478. ;    Render0GUI_3:
  2479. ;    Lea.l    ConfigText0,a2
  2480. ;    Jmp    Render0GUI_F
  2481.     Render0GUI_4:
  2482.     Lea.l    AboutText0,a2
  2483. ;!!    Jmp    Render0GUI_F
  2484.     Render0GUI_F:
  2485.  
  2486.     CrunchTLoop:
  2487.     move.l  ExecBase,a6
  2488.     lea.l   BufIText,a1
  2489.     move.l  a2,a0
  2490.     move.l  d3,d0
  2491.     mulu    #it_SIZEOF,d0
  2492.     add.l   d0,a0
  2493.     moveq   #it_SIZEOF,d0
  2494.     jsr     CopyMem(a6)
  2495.     lea.l   BufIText,a0
  2496.     move.l  IntuitionBase,a6
  2497.     move.l  Font2,it_ITextFont(a0)
  2498.     jsr     IntuiTextLength(a6)
  2499.     asr.l   #1,d0
  2500.     move.l  d0,-(sp)
  2501.     lea.l   BufIText,a0
  2502.     move.w  it_LeftEdge(a0),d0
  2503.     bsr     ComputeX
  2504.     add.w   OffX,d0
  2505.     ext.l   d0
  2506.     sub.l   (sp)+,d0
  2507.     move.w  d0,it_LeftEdge(a0)
  2508.     move.w  it_TopEdge(a0),d0
  2509.     bsr     ComputeY
  2510.     add.w   OffY,d0
  2511.     move.l  Font2,a1
  2512.     move.w  ta_YSize(a1),d1
  2513.     asr.w   #1,d1
  2514.     sub.w   d1,d0
  2515.     move.w  d0,it_TopEdge(a0)
  2516.     move.l  a0,a1
  2517.     move.l  Wnd,a0
  2518.     move.l  wd_RPort(a0),a0
  2519.     moveq   #0,d0
  2520.     moveq   #0,d1
  2521.     jsr     PrintIText(a6)
  2522.     addq.l  #1,d3
  2523. ;    Cmp.b    #1,GUI_
  2524. ;    Beq.s    CrunchTLoopGUI_1
  2525. ;    Cmp.b    #2,GUI_
  2526. ;    Beq.s    CrunchTLoopGUI_2
  2527. ;    Cmp.b    #3,GUI_
  2528. ;    Beq.s    CrunchTLoopGUI_3
  2529. ;    Cmp.b    #4,GUI_
  2530. ;    Beq.s    CrunchTLoopGUI_4
  2531. ;    CrunchTLoopGUI_1:
  2532. ;    Cmp.w    #Crunch_TNUM,d3
  2533. ;    Bmi    CrunchTLoop
  2534. ;    Jmp    CrunchTLoopGUI_F
  2535. ;    CrunchTLoopGUI_2:
  2536. ;    Cmp.w    #Working_TNUM,d3
  2537. ;    Bmi    CrunchTLoop
  2538. ;    Jmp    CrunchTLoopGUI_F
  2539. ;    CrunchTLoopGUI_3:
  2540. ;    Cmp.w    #Config_TNUM,d3
  2541. ;    Bmi    CrunchTLoop
  2542. ;    Jmp    CrunchTLoopGUI_F
  2543. ;    CrunchTLoopGUI_4:
  2544.     Cmp.w    #About_TNUM,d3
  2545.     Bmi    CrunchTLoop
  2546. ;!!    Jmp    CrunchTLoopGUI_F
  2547.     CrunchTLoopGUI_F:
  2548.     movem.l (sp)+,d0-d5/a0-a2/a6
  2549.     Move.b    #0,ComputeFont_Lock
  2550.     rts
  2551.  
  2552.  
  2553. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2554. *                                    *
  2555. *  FUNCTION:                                *
  2556. *    Render1:                            *
  2557. *        Dessine une Bevel Box dans la fenêtre en s'adaptant    *
  2558. *        au fontes à la manière GadtoolsBox            *
  2559. *  INPUT:                                *
  2560. *    Render1:                            *
  2561. *        Wnd.l        =  Pointeur sur Window            *
  2562. *        Width.w        =  Dimension avant calculation        *
  2563. *        Height.w    =  Dimension avant calculation        *
  2564. *        VisualInfo.l    =  Pointeur sur stucture VisualInfo    *
  2565. *        Bevelbox_TagList.l=Pointeur sur une TagList        *
  2566. *        BevelTop.w    =  Bevelbox Top avant calculation    *
  2567. *        BevelLeft.w    =  Bevelbox Left avant calculation    *
  2568. *        BevelWidth.w    =  Bevelbox Width avant calculation    *
  2569. *        BevelHeight.w    =  Bevelbox Height avant calculation    *
  2570. *  OUTPUT:                                *
  2571. *    Render1:                            *
  2572. *                                    *
  2573. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2574.  
  2575.  
  2576. Render1:
  2577.     Movem.l    d0-d5/a0-a3/a6,-(sp)
  2578.     move.l  Wnd,a0
  2579.     move.w  Width,d2
  2580.     move.w  Height,d3
  2581.     jsr     ComputeFont
  2582.     Move.l  VisualInfo,NormalBevelbox+4
  2583.     Move.l  VisualInfo,InverseBevelbox+4
  2584.  
  2585.     Moveq    #0,d0
  2586.     Move.w    BevelTop,d0        ; Top en d0
  2587.     Bsr    ComputeY
  2588.     Add.w    OffY,d0            ; Ajouter Offset
  2589.     Move.l    d0,d1            ; Top + Offset  en  d1
  2590.     Move.w    BevelWidth,d0        ; Width en d0
  2591.     Bsr    ComputeX
  2592.     Move.l    d0,d2            ; Top + Offset  en  d2
  2593.     Move.w    BevelHeight,d0        ; Height en d0
  2594.     Bsr    ComputeY
  2595.     Move.l    d0,d3            ; Top + Offset  en  d3
  2596.     Move.w    BevelLeft,d0        ; Left en d0
  2597.     Bsr    ComputeX
  2598.     Add.w    OffX,d0            ; Left + Offset en d0
  2599.  
  2600.     Move.l    GadToolsBase,a6
  2601.     Move.l    Wnd,a0
  2602.     Move.l    wd_RPort(a0),a0        ; RastPort en a0
  2603.     Move.l    Bevelbox_Taglist,a1    ; TagList en a1
  2604.     Jsr    DrawBevelBoxA(a6)
  2605.     Movem.l    (sp)+,d0-d5/a0-a3/a6
  2606.     Rts
  2607.  
  2608.  
  2609. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2610. *  Ouvre la fenêtre et crée les gadgets.  * * * * * * * * * * * * * * * *
  2611. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2612.  
  2613. OpenWindow_:
  2614.     movem.l d1-d4/a0-a4/a6,-(sp)
  2615.     move.l  Scr,a0
  2616.     moveq   #0,d3
  2617.     moveq   #0,d2
  2618.     move.w  Width,d2
  2619.     move.w  Height,d3
  2620.     Move.b    #0,ComputeFont_Lock    ; Texte des gadgets
  2621.     bsr     ComputeFont
  2622.     move.l  Scr,a0
  2623.     move.l  d2,d0
  2624.     bsr     ComputeX
  2625.     move.l  d0,d4
  2626.     move.w  Left,d2
  2627.     add.w   d2,d0
  2628.     add.w   OffX,d0
  2629.     Add.b    sc_WBorRight(a0),d0
  2630.     cmp.w   sc_Width(a0),d0
  2631.     bls.s   CrunchWindowOk
  2632.     move.w  sc_Width(a0),d0
  2633.     sub.w   d4,d0
  2634.     move.w  d0,d2
  2635. CrunchWindowOk:
  2636.     move.l  d3,d0
  2637.     bsr     ComputeY
  2638.     move.l  d0,d4
  2639.     move.w  Top,d3
  2640.     add.w   d3,d0
  2641.     add.w   OffY,d0
  2642.     Add.b    sc_WBorBottom(a0),d0
  2643.     cmp.w   sc_Height(a0),d0
  2644.     bls.s   CrunchHeightOk
  2645.     move.w  sc_Height(a0),d0
  2646.     sub.w   d4,d0
  2647.     move.w  d0,d3
  2648. CrunchHeightOk:
  2649.     Move.l    GadToolsBase,a6
  2650. ;    Cmp.b    #1,GUI_
  2651. ;    Beq.s    CrunchHeightOkGUI_1    ; Mettre les bons Tags en a4
  2652.     Cmp.b    #2,GUI_
  2653.     Beq.s    CrunchHeightOkGUI_2
  2654.     Cmp.b    #3,GUI_
  2655.     Beq.s    CrunchHeightOkGUI_3
  2656.     Cmp.b    #4,GUI_
  2657.     Beq.L    CrunchHeightOkGUI_4
  2658.     CrunchHeightOk_Com:
  2659.     Jsr    CreateContext(a6)    ; ContextData en d0
  2660.     Move.l    d0,a3
  2661.     Tst.l    d0
  2662.     Beq    CrunchCError        ; Erreur de ContextData
  2663.     Rts
  2664. ;    CrunchHeightOkGUI_1:
  2665. ;    Lea.l    CrunchGTags,a4
  2666. ;    Lea.l    CrunchGList,a0
  2667. ;    Bsr    CrunchHeightOk_Com
  2668. ;    Movem.l    d2-d3,-(sp)
  2669. ;    Moveq    #0,d3            ; Nb de gadgets crées  =  0
  2670. ;    Lea    CrunchGTags,a4
  2671. ;    Jmp    CrunchHeightOkGUI_F
  2672.     CrunchHeightOkGUI_2:
  2673.     Lea.l    WorkingGTags,a4
  2674.     Lea.l    WorkingGList,a0
  2675.     Bsr    CrunchHeightOk_Com
  2676.     Movem.l    d2-d3,-(sp)
  2677.     Moveq    #0,d3            ; Nombre de gadgets crées  =  0
  2678.     Lea    WorkingGTags,a4
  2679.     Jmp    CrunchHeightOkGUI_F
  2680.     CrunchHeightOkGUI_3:
  2681.     Lea.l    ConfigGTags,a4
  2682.     Lea.l    ConfigGList,a0
  2683.     Bsr    CrunchHeightOk_Com
  2684.     Movem.l    d2-d3,-(sp)
  2685.     Moveq    #0,d3            ; Nombre de gadgets crées  =  0
  2686.     Lea    ConfigGTags,a4
  2687.     Jmp    CrunchHeightOkGUI_F
  2688.     CrunchHeightOkGUI_4:
  2689.     Lea.l    AboutGTags,a4
  2690.     Lea.l    AboutGList,a0
  2691.     Bsr    CrunchHeightOk_Com
  2692.     Movem.l    d2-d3,-(sp)
  2693.     Moveq    #0,d3            ; Nombre de gadgets crées  =  0
  2694.     Lea    AboutGTags,a4
  2695.     Jmp    CrunchHeightOkGUI_F
  2696.     CrunchHeightOkGUI_F:
  2697.  
  2698.  
  2699. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2700. *  GadgetLoop: Crée les gadgets en boucle.  * * * * * * * * * * * * * * *
  2701. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2702.  
  2703. CrunchGL:                ; Gadget Loop
  2704.     move.l  ExecBase,a6
  2705. ;    Cmp.b    #1,GUI_
  2706. ;    Beq.s    CrunchGl0GUI_1
  2707.     Cmp.b    #2,GUI_
  2708.     Beq.s    CrunchGl0GUI_2
  2709.     Cmp.b    #3,GUI_
  2710.     Beq.s    CrunchGl0GUI_3
  2711.     Cmp.b    #4,GUI_
  2712.     Beq.s    CrunchGl0GUI_4
  2713. ;    CrunchGl0GUI_1:
  2714. ;    Lea.l    CrunchNGads,a0
  2715. ;    Jmp    CrunchGl0GUI_F
  2716.     CrunchGl0GUI_2:
  2717.     Lea.l    WorkingNGads,a0        ; Structure NewGadget en a0
  2718.     Jmp    CrunchGl0GUI_F
  2719.     CrunchGl0GUI_3:
  2720.     Lea.l    ConfigNGads,a0
  2721.     Jmp    CrunchGl0GUI_F
  2722.     CrunchGl0GUI_4:
  2723.     Lea.l    AboutNGads,a0
  2724. ;!!    Jmp    CrunchGl0GUI_F
  2725.     CrunchGl0GUI_F:
  2726.     move.l  d3,d0            ; Nombre de gadget affichés
  2727.     mulu    #gng_SIZEOF,d0        ; à copier = Taille gadget * Size
  2728.     add.l   d0,a0            ; Adresse source en a0
  2729.     lea.l   BufNewGad,a1        ; Adresse dest en a1
  2730.     moveq   #gng_SIZEOF,d0        ; Nombre de bytes à copier
  2731.     jsr     CopyMem(a6)            ; Copier le gadget dans le tampon
  2732.     lea.l   BufNewGad,a0
  2733.     move.l  VisualInfo,gng_VisualInfo(a0); VisualInfo doit être initialisé
  2734.     move.l  Font,gng_TextAttr(a0)    ; TextAttr doit ête initialisé
  2735.     move.w  gng_LeftEdge(a0),d0
  2736.     bsr     ComputeX
  2737.     add.w   OffX,d0
  2738.     move.w  d0,gng_LeftEdge(a0)
  2739.     move.w  gng_TopEdge(a0),d0
  2740.     bsr     ComputeY
  2741.     add.w   OffY,d0
  2742.     move.w  d0,gng_TopEdge(a0)
  2743.     move.w  gng_Width(a0),d0
  2744.     bsr     ComputeX
  2745.     move.w  d0,gng_Width(a0)
  2746.     move.w  gng_Height(a0),d0
  2747.     bsr     ComputeY
  2748.     move.w  d0,gng_Height(a0)
  2749.     move.l  GadToolsBase,a6
  2750. ;    Cmp.b    #1,GUI_
  2751. ;    Beq.s    CrunchGl1GUI_1
  2752.     Cmp.b    #2,GUI_
  2753.     Beq.s    CrunchGl1GUI_2
  2754.     Cmp.b    #3,GUI_
  2755.     Beq.s    CrunchGl1GUI_3
  2756.     Cmp.b    #4,GUI_
  2757.     Beq.s    CrunchGl1GUI_4
  2758. ;    CrunchGl1GUI_1:
  2759. ;    Lea.l    CrunchGTypes,a0
  2760. ;    Jmp    CrunchGl1GUI_F
  2761.     CrunchGl1GUI_2:
  2762.     Lea.l    WorkingGTypes,a0    ; GadgetType en a0
  2763.     Jmp    CrunchGl1GUI_F
  2764.     CrunchGl1GUI_3:
  2765.     Lea.l    ConfigGTypes,a0
  2766.     Jmp    CrunchGl1GUI_F
  2767.     CrunchGl1GUI_4:
  2768.     Lea.l    AboutGTypes,a0
  2769. ;!!    Jmp    CrunchGl1GUI_F
  2770.     CrunchGl1GUI_F:
  2771.     moveq   #0,d0
  2772.     move.l  d3,d1            ; Nombre de gadget crés en d1
  2773.     asl.l   #1,d1            ; Multiplier par 2
  2774.     add.l   d1,a0            ; GadgetType suivant (.w)
  2775.     move.w  (a0),d0            ; Kind en d0
  2776.     move.l  a3,a0            ; Context ou Previous en a0
  2777.     lea.l   BufNewGad,a1        ; Gadget copié en a1 (NewGad)
  2778.     move.l  a4,a2            ; Taglist en a2
  2779.     jsr     CreateGadgetA(a6)        ; Créer le gadget
  2780.     tst.l   d0                ; Création ok ?
  2781.     bne.s   CrunchCreateOK        ; Oui, continue
  2782.     movem.w (sp)+,d2-d3
  2783.     bra     CrunchCError        ; Non, on se branche à l'erreur
  2784. CrunchCreateOK:
  2785.     move.l  d0,a3        ; Gadget crée devient le précédent
  2786.     move.l  d3,d0            ; Nombre de gadget crés en d0
  2787.     asl.l   #2,d0            ; Mulitplier le nb par 4
  2788. ;    Cmp.b    #1,GUI_
  2789. ;    Beq.s    CrunchCreateOkGUI_1
  2790.     Cmp.b    #2,GUI_
  2791.     Beq.s    CrunchCreateOkGUI_2
  2792.     Cmp.b    #3,GUI_
  2793.     Beq.s    CrunchCreateOkGUI_3
  2794.     Cmp.b    #4,GUI_
  2795.     Beq.s    CrunchCreateOkGUI_4
  2796. ;    CrunchCreateOkGUI_1:
  2797. ;    Lea.l    CrunchGadgets,a0
  2798. ;    Jmp    CrunchCreateOkGUI_F
  2799.     CrunchCreateOkGUI_2:
  2800.     Lea.l    WorkingGadgets,a0    ; GadgetType en a0
  2801.     Jmp    CrunchCreateOkGUI_F
  2802.     CrunchCreateOkGUI_3:
  2803.     Lea.l    ConfigGadgets,a0
  2804.     Jmp    CrunchCreateOkGUI_F
  2805.     CrunchCreateOkGUI_4:
  2806.     Lea.l    AboutGadgets,a0
  2807. ;!!    Jmp    CrunchCreateOkGUI_F
  2808.     CrunchCreateOkGUI_F:
  2809.     add.l   d0,a0            ; Avancer du   nb de gadget * 4
  2810.     move.l  a3,(a0)            ; Sauver le gadget à la bonne place
  2811. CrunchTagLoop:
  2812.     tst.l   (a4)            ; Taglist contient TAG_DONE ?
  2813.     beq.s   CrunchDN            ; Oui, on continue
  2814.     addq.w  #8,a4            ; Non, on boucle jusqu'à obtenir
  2815.     bra.s   CrunchTagLoop        ;  TAG_DONE
  2816. CrunchDN:
  2817.     addq.w  #4,a4            ; Taglist = TAG_DONE + 4
  2818.     addq.w  #1,d3            ; Nb de gadget crées + 1
  2819. ;    Cmp.b    #1,GUI_
  2820. ;    Beq.s    CrunchDn0GUI_1
  2821.     Cmp.b    #2,GUI_
  2822.     Beq.L    CrunchDn0GUI_2
  2823.     Cmp.b    #3,GUI_
  2824.     Beq.L    CrunchDn0GUI_3
  2825.     Cmp.b    #4,GUI_
  2826.     Beq    CrunchDn0GUI_4
  2827.     CrunchDn0GUI_Com0:
  2828.     Move.l    Scr,a0
  2829.     Move.w    Width,d0
  2830.     Bsr    ComputeX
  2831.     Add.w    OffX,d0
  2832.     Add.b    sc_WBorRight(a0),d0
  2833.     Rts
  2834.     CrunchDn0GUI_Com1:
  2835.     Move.w    Height,d0
  2836.     Bsr    ComputeY
  2837.     Add.w    OffY,d0
  2838.     Add.b    sc_WBorBottom(a0),d0
  2839.     Rts
  2840. ;    CrunchDn0GUI_1:
  2841. ;    Cmp.w    #Crunch_CNT,d3        ; Est-ce égal au nombre de gadget total
  2842. ;    Bmi    CrunchGL        ; Inférieur, on crée le gadget suivant
  2843. ;    Movem.l    (sp)+,d2-d3
  2844. ;    Ext.l    d2
  2845. ;    Ext.l    d3
  2846. ;    Move.l    CrunchGList,CrunchWG+4
  2847. ;    Move.l    d2,CrunchL+4
  2848. ;    Move.l    d3,CrunchT+4
  2849. ;    Bsr    CrunchDn0GUI_Com0
  2850. ;    Move.l    d0,CrunchW+4
  2851. ;    Bsr    CrunchDn0GUI_Com1
  2852. ;    Move.l    d0,CrunchH+4
  2853. ;    Lea.l    CrunchWindowTags,a1
  2854. ;    Jmp    CrunchDn0GUI_F2
  2855.     CrunchDn0GUI_2:
  2856.     Cmp.w    #Working_CNT,d3
  2857.     Bmi    CrunchGL
  2858.     Movem.l    (sp)+,d2-d3
  2859.     Ext.l    d2
  2860.     Ext.l    d3
  2861.     Move.l    WorkingGlist,WorkingWG+4
  2862.     Move.l    d2,WorkingL+4
  2863.     Move.l    d3,WorkingT+4
  2864.     Bsr    CrunchDn0GUI_Com0
  2865.     Move.l    d0,WorkingW+4
  2866.     Bsr    CrunchDn0GUI_Com1
  2867.     Move.l    d0,WorkingH+4
  2868.     Lea.l    WorkingWindowTags,a1
  2869.     Jmp    CrunchDn0GUI_F2
  2870.     CrunchDn0GUI_3:
  2871.     Cmp.w    #Config_CNT,d3
  2872.     Bmi    CrunchGL
  2873.     Movem.l    (sp)+,d2-d3
  2874.     Ext.l    d2
  2875.     Ext.l    d3
  2876.     Move.l    ConfigGlist,ConfigWG+4
  2877.     Move.l    d2,ConfigL+4
  2878.     Move.l    d3,ConfigT+4
  2879.     Bsr    CrunchDn0GUI_Com0
  2880.     Move.l    d0,ConfigW+4
  2881.     Bsr    CrunchDn0GUI_Com1
  2882.     Move.l    d0,ConfigH+4
  2883.     Lea.l    ConfigWindowTags,a1
  2884.     Jmp    CrunchDn0GUI_F2
  2885.     CrunchDn0GUI_4:
  2886.     Cmp.w    #About_CNT,d3
  2887.     Bmi    CrunchGL
  2888.     Movem.l    (sp)+,d2-d3
  2889.     Ext.l    d2
  2890.     Ext.l    d3
  2891.     Move.l    AboutGList,AboutWG+4
  2892.     Move.l    d2,AboutL+4
  2893.     Move.l    d3,AboutT+4
  2894.     Bsr    CrunchDn0GUI_Com0
  2895.     Move.l    d0,AboutW+4
  2896.     Bsr    CrunchDn0GUI_Com1
  2897.     Move.l    d0,AboutH+4
  2898.     Lea.l    AboutWindowTags,a1
  2899.     Jmp    CrunchDn0GUI_F2
  2900.     CrunchDn0GUI_F1:
  2901.     CrunchDn0GUI_F2:
  2902.     move.l  IntuitionBase,a6
  2903.     suba.l  a0,a0
  2904.     jsr     OpenWindowTagList(a6)
  2905.     move.l  d0,Wnd
  2906.     tst.l   d0
  2907.     beq     CrunchWError
  2908.     move.l  GadToolsBase,a6
  2909.     move.l  Wnd,a0
  2910.     suba.l  a1,a1
  2911.     jsr     GT_RefreshWindow(a6)
  2912. ;    Cmp.b    #1,GUI_            ; Si pas de texte, se brancher à F2
  2913. ;    Beq.s    CrunchDn5GUI_F1
  2914.     Cmp.b    #2,GUI_
  2915.     Beq.s    CrunchDn5GUI_F2
  2916.     Cmp.b    #3,GUI_
  2917.     Beq.s    CrunchDn5GUI_F2
  2918. ;    Cmp.b    #4,GUI_
  2919. ;!!    Beq.s    CrunchDn5GUI_F1
  2920.     CrunchDn5GUI_F1:
  2921.     Bsr    Render0
  2922.     CrunchDn5GUI_F2:
  2923.     moveq   #0,d0
  2924. CrunchDone:
  2925.     movem.l (sp)+,d1-d4/a0-a4/a6
  2926.     rts
  2927. CrunchCError:
  2928.     moveq   #1,d0
  2929.     bra.s   CrunchDone
  2930. CrunchGError:
  2931.     moveq   #2,d0
  2932.     bra.s   CrunchDone
  2933. CrunchWError:
  2934.     moveq   #4,d0
  2935.     bra.s   CrunchDone
  2936.  
  2937.  
  2938. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2939. *  Ferme la fenêtre et libère les gadgets * * * * * * * * * * * * * * * *
  2940. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2941.  
  2942. CloseWindow_:
  2943.     movem.l d0-d1/a0-a2/a6,-(sp)
  2944.     move.l  IntuitionBase,a6
  2945.     move.l  Wnd,a0
  2946.     cmpa.l  #0,a0
  2947.     beq.s   CrunchNWnd
  2948.     jsr     CloseWindow(a6)
  2949.     move.l  #0,Wnd
  2950. CrunchNWnd:
  2951.     Move.l    GadtoolsBase,a6
  2952. ;    Cmp.b    #1,GUI_
  2953. ;    Beq    CrunchNWndGUI1
  2954.     Cmp.b    #2,GUI_
  2955.     Beq    CrunchNWndGUI2
  2956.     Cmp.b    #3,GUI_
  2957.     Beq    CrunchNWndGUI3
  2958.     Cmp.b    #4,GUI_
  2959.     Beq    CrunchNWndGUI4
  2960. ;    CrunchNWndGUI1:
  2961. ;    Move.l    CrunchGList,a0    
  2962. ;    Cmpa.l    #0,a0
  2963. ;    Beq.l    CrunchNGads
  2964. ;    Jsr    FreeGadgets(a6)
  2965. ;    Move.l    #0,CrunchGList
  2966. ;    Jmp    CrunchNWndGUI_F
  2967.     CrunchNWndGUI2:
  2968.     Move.l    WorkingGList,a0
  2969.     Cmpa.l    #0,a0
  2970.     Beq.l    CrunchNGads
  2971.     Jsr    FreeGadgets(a6)
  2972.     Move.l    #0,WorkingGList
  2973.     Jmp    CrunchNWndGUI_F
  2974.     CrunchNWndGUI3:
  2975.     Move.l    ConfigGList,a0
  2976.     Cmpa.l    #0,a0
  2977.     Beq.l    CrunchNGads
  2978.     Jsr    FreeGadgets(a6)
  2979.     Move.l    #0,ConfigGList
  2980.     Jmp    CrunchNWndGUI_F
  2981.     CrunchNWndGUI4:
  2982.     Move.l    AboutGList,a0
  2983.     Cmpa.l    #0,a0
  2984.     Beq.l    CrunchNGads
  2985.     Jsr    FreeGadgets(a6)
  2986.     Move.l    #0,AboutGList
  2987. ;!!    Jmp    CrunchNWndGUI_F
  2988.     CrunchNWndGUI_F:
  2989. CrunchNGads:
  2990.     movem.l (sp)+,d0-d1/a0-a2/a6
  2991.     rts
  2992.  
  2993.  
  2994. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2995. *  Textes, TagLists, GadgetTypes, etc...  * * * * * * * * * * * * * * * *
  2996. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2997.  
  2998. IconName:        dc.b    'icon.library',0
  2999. WorkbenchName:        dc.b    'workbench.library',0
  3000. DosName:        dc.b    'dos.library',0
  3001. GadtoolsName:        dc.b    'gadtools.library',0
  3002. IntuitionName:        dc.b    'intuition.library',0
  3003. ppName:            dc.b    'powerpacker.library',0
  3004. AslName:        dc.b    'asl.library',0
  3005. WorkingWTitle:        dc.b    ' AppPP  Working Window ',0
  3006. ConfigWTitle:        DC.B    ' AppPP  Config Window',0
  3007. Config_AslPTagsWndText:    dc.b    ' AppPP  File Requester Window',0
  3008. AboutWTitle:        DC.B    ' AppPP     About Window',0
  3009. Def_EasyStruct_Title:    dc.b    ' AppPP Request',0
  3010. ProgramName:
  3011. AppIconText:        dc.b    'AppPP',0
  3012. About_IText0:        DC.B    '- AppPP v1.0 -',0
  3013. ConfigFileName0:    dc.b    'Env:AppPP.Prefs',0
  3014. ConfigFileName1:    dc.b    'Envarc:AppPP.Prefs',0
  3015. Working_CrunchText:    DC.B    'Crunch',0
  3016. Working_DecrunchText:    DC.B    'Decrunch',0
  3017. Working_NothingText:    DC.B    'Do Nothing',0
  3018. Working_SkipText:    DC.B    'Skip File',0
  3019. Working_StopText:    DC.B    'Stop All !',0
  3020. Working_StatusText:    DC.B    'Status',0
  3021. Working_NameText:    DC.B    'Name  ',0
  3022. Working_LengthText:    DC.B    'Source',0
  3023. Working_DestText:    DC.B    'Dest ',0
  3024. Config_AltPathString:    DC.B    'Ram Disk:',0
  3025. Config_AltPathText:    dc.b    'Alt Path:',0
  3026. Config_UseAltPathText:    DC.B    'Use Alt Path',0
  3027. Config_EffText:        DC.B    'Efficiency',0
  3028. Config_BufText:        DC.B    'Buffer',0
  3029. Config_DecrEffText:    DC.B    'Decr Effect',0
  3030. Config_EffLab0:        DC.B    'Fast',0
  3031. Config_EffLab1:        DC.B    'Mediocre',0
  3032. Config_EffLab3:        DC.B    'Very '
  3033. Config_EffLab2:        DC.B    'Good',0
  3034. Config_EffLab4:        DC.B    'Best',0
  3035. Config_BufLab0:        DC.B    'Small',0
  3036. Config_BufLab1:        DC.B    'Medium',0
  3037. Config_BufLab2:        DC.B    'Large',0
  3038. Config_DecrEffLab0:    DC.B    'Color 0',0
  3039. Config_DecrEffLab1:    DC.B    'Color 1',0
  3040. Config_DecrEffLab2:    DC.B    'Pointer',0
  3041. Config_DecrEffLab3:    DC.B    'Scroll',0
  3042. Config_DecrEffLab4:    DC.B    '« None »',0
  3043. Config_SaveText:    DC.B    'Save',0
  3044. Config_UseText:        DC.B    'Use',0
  3045. Config_CancelText:    DC.B    'Cancel',0
  3046. Config_QuitText:    DC.B    'Quit',0
  3047. Config_GetText:        DC.B    'Get',0
  3048. Config_AboutText:    DC.B    'About',0
  3049. Config_AslPTagsDirText:    dc.b    'Ram Disk:',0
  3050. InterText:        DC.B    'Interesting !',0
  3051. About_IText1:        DC.B    'By BURNAND Patrick',0
  3052. About_IText2:        DC.B    'A Program to Power(De)Pack',0
  3053. About_IText3:        DC.B    'for the Great WB 2.04',0
  3054. About_IText4:        DC.B    'Please read the doc !',0
  3055. About_IText5:        DC.B    'Enjoy the Space Music !',0
  3056. SaveEnvConfigErr_EasyT:    dc.b    " Cannot save",10
  3057.             dc.b    "Configuration",10
  3058.             dc.b    "   to Env:",0
  3059. SaveEnvarcConfigErr_EasyT:dc.b    " Cannot save",10
  3060.             dc.b    'Configuration',10
  3061.             dc.b    ' to  Envarc:',0
  3062. NF_LockErr_EasyT:    dc.b    "Can't Lock() file.",0
  3063. NF_ExamineErr_EasyT:    dc.b    "Can't Examine() file.",0
  3064. OpenReadErr_EasyT:    dc.b    "Can't Open()",10
  3065.             dc.b    "source  file",0
  3066. OpenWriteErr_EasyT:    dc.b    "Can't Open()",10
  3067.             dc.b    " dest file.",0
  3068. DC_EmptyErr_EasyT:
  3069. NF_ReadErr_EasyT:    dc.b    " File is empty or",10
  3070.             dc.b    "less than 4 bytes.",10
  3071.             dc.b    ' Not  Crunchable.',0
  3072. DNC_ReadErr_EasyT:    dc.b    "Error while Reading",10
  3073.             dc.b    "file. Can't crunch.",0
  3074. DC_ReadErr_EasyT:    dc.b    " Error while Reading",10
  3075.             dc.b    "file. Can't decrunch.",0
  3076. DNC_NoMemErr_EasyT:    dc.b    "Can't  AllocMem()",10
  3077.             dc.b    "to  crunch  File.",0
  3078. DC_NoMemErr_EasyT:    dc.b    "Can't  AllocMem()",10
  3079.             dc.b    "to decrunch File.",0
  3080. DC_UnknownPPErr_EasyT:    dc.b    "  Unknown Powerpacker",10
  3081.             dc.b    "Format. Can't decrunch.",0
  3082. DC_CryptErr_EasyT:    dc.b    " File is Crypted.  Use",10
  3083.             dc.b    "Powerpacker to decrunch",0
  3084. DC_PassErr_EasyT:    dc.b    "Wrong PassWord.",10
  3085.             dc.b    "Can't decrunch.",0
  3086. WriteErr_EasyT:        dc.b    "  Write() Error.  Can't",10
  3087.             dc.b    "save.  Dest File deleted.",0
  3088. Finished_EasyT:        dc.b    "Work finished.",0
  3089. Def_EasyStruct_GadText:    dc.b    'Ok',0
  3090. NoMemory_ErrT:        dc.b    "            AppPP  Error Report",10
  3091.             dc.b    "            ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯",10
  3092.             dc.b    10
  3093.             dc.b    "I can't Work because there is probably not enough Memory.",10
  3094.             dc.b    "I've tried to quit properly.    Sorry...",10,0
  3095. Working_WaitingT:    DC.B    'Waiting',0
  3096. Working_ScanningT:    dc.b    'Scanning ',0
  3097. Working_LoadingT:    dc.b    "Loading ",0
  3098. Working_CrunchingT:    dc.b    'Crunching ',0
  3099. Working_DC_LoadDecrT:    dc.b    "Loading & Decrunching",0
  3100. Working_SavingT:    dc.b    'Saving',0
  3101.  
  3102. WBName:            dc.b    'Workbench',0
  3103. TopazName:        dc.b    'topaz.font',0
  3104.  
  3105. Working_DirErrT:    dc.b    "Skipping directory ...",0
  3106. Working_SkipT:        dc.b    '** Skipping File.',0
  3107. Working_StopT:        dc.b    '** Aborting All !',0
  3108. Working_NotCrunchedErrT:dc.b    "File is not Crunched.",0
  3109. Working_CrunchedErrT:    dc.b    "File is already Crunched.",0
  3110. Working_DNC_OverFlowT:    dc.b    "Buffer Overflow",10,0
  3111. Working_DNC_AbortedT:    dc.b    "Crunching Aborted.",0
  3112. FileName_StrLength:    dc.b    0
  3113. UserResponse:        dc.b    0
  3114. Working_CrunchUserResponse:dc.b    0
  3115. Working_UserResponse:    dc.b    0
  3116. Config_UserResponse:    dc.b    0
  3117. About_UserResponse:    dc.b    0
  3118. GUI_:            dc.b    0
  3119. ComputeFont_Lock:    dc.b    0
  3120. ReplyMessage_Lock:    dc.b    0
  3121.  
  3122. Even
  3123.  
  3124. WorkingGTypes:
  3125.         DC.W    BUTTON_KIND
  3126.         DC.W    BUTTON_KIND
  3127.         DC.W    BUTTON_KIND
  3128.         DC.W    BUTTON_KIND
  3129.         DC.W    BUTTON_KIND
  3130.         DC.W    TEXT_KIND
  3131.         DC.W    TEXT_KIND
  3132.         DC.W    NUMBER_KIND
  3133.         DC.W    NUMBER_KIND
  3134.  
  3135. ConfigGTypes:    DC.W    TEXT_KIND
  3136.         DC.W    CHECKBOX_KIND
  3137.         DC.W    CYCLE_KIND
  3138.         DC.W    CYCLE_KIND
  3139.         DC.W    CYCLE_KIND
  3140.         DC.W    BUTTON_KIND
  3141.         DC.W    BUTTON_KIND
  3142.         DC.W    BUTTON_KIND
  3143.         DC.W    BUTTON_KIND
  3144.         DC.W    BUTTON_KIND
  3145.         DC.W    BUTTON_KIND
  3146.  
  3147. AboutGTypes:    DC.W    BUTTON_KIND
  3148.  
  3149. WorkingNGads:
  3150.         DC.W    12,9,109,19
  3151.         DC.L    Working_CrunchText,0
  3152.         DC.W    GD_Working_Crunch
  3153.         DC.L    PLACETEXT_IN,0,0
  3154.         DC.W    124,9,113,19
  3155.         DC.L    Working_DecrunchText,0
  3156.         DC.W    GD_Working_Decrunch
  3157.         DC.L    PLACETEXT_IN,0,0
  3158.         DC.W    240,9,109,19
  3159.         DC.L    Working_NothingText,0
  3160.         DC.W    GD_Working_Nothing
  3161.         DC.L    PLACETEXT_IN,0,0
  3162.         DC.W    20,39,157,21
  3163.         DC.L    Working_SkipText,0
  3164.         DC.W    GD_Working_Skip
  3165.         DC.L    PLACETEXT_IN,0,0
  3166.         DC.W    184,39,157,21
  3167.         DC.L    Working_StopText,0
  3168.         DC.W    GD_Working_Stop
  3169.         DC.L    PLACETEXT_IN,0,0
  3170.         DC.W    80,93,261,21
  3171.         DC.L    Working_StatusText,0
  3172.         DC.W    GD_Working_Status
  3173.         DC.L    PLACETEXT_LEFT,0,0
  3174.         DC.W    80,67,261,21
  3175.         DC.L    Working_NameText,0
  3176.         DC.W    GD_Working_Name
  3177.         DC.L    PLACETEXT_LEFT,0,0
  3178.         DC.W    80,119,97,21
  3179.         DC.L    Working_LengthText,0
  3180.         DC.W    GD_Working_Length
  3181.         DC.L    PLACETEXT_LEFT,0,0
  3182.         DC.W    244,119,97,21
  3183.         DC.L    Working_DestText,0
  3184.         DC.W    GD_Working_Dest
  3185.         DC.L    PLACETEXT_LEFT,0,0
  3186.  
  3187.  
  3188. ConfigNGads:    DC.W    116,33,173,19
  3189.         DC.L    Config_AltPathText,0
  3190.         DC.W    GD_Config_AltPath        ; Text
  3191.         DC.L    PLACETEXT_LEFT,0,0
  3192.  
  3193.         DC.W    119,11,26,11
  3194.         DC.L    Config_UseAltPathText,0
  3195.         DC.W    GD_Config_UseAltPath        ; CheckBox
  3196.         DC.L    PLACETEXT_LEFT!NG_HIGHLABEL,0,0
  3197.  
  3198.         DC.W    116,65,165,17
  3199.         DC.L    Config_EffText,0
  3200.         DC.W    GD_Config_Eff            ; Efficiency
  3201.         DC.L    PLACETEXT_LEFT,0,0
  3202.  
  3203.         DC.W    116,89,165,17
  3204.         DC.L    Config_BufText,0
  3205.         DC.W    GD_Config_Buf            ; Buffer
  3206.         DC.L    PLACETEXT_LEFT,0,0
  3207.  
  3208.         DC.W    116,113,165,17
  3209.         DC.L    Config_DecrEffText,0
  3210.         DC.W    GD_Config_DecrEff        ; Effect
  3211.         DC.L    PLACETEXT_LEFT,0,0
  3212.  
  3213.         DC.W    4,145,69,17
  3214.         DC.L    Config_SaveText,0
  3215.         DC.W    GD_Config_Save            ; Save
  3216.         DC.L    PLACETEXT_IN,0,0
  3217.  
  3218.         DC.W    76,145,69,17
  3219.         DC.L    Config_UseText,0
  3220.         DC.W    GD_Config_Use            ; Use
  3221.         DC.L    PLACETEXT_IN,0,0
  3222.  
  3223.         DC.W    148,145,69,17
  3224.         DC.L    Config_CancelText,0
  3225.         DC.W    GD_Config_Cancel        ; Cancel
  3226.         DC.L    PLACETEXT_IN,0,0
  3227.  
  3228.         DC.W    220,145,69,17
  3229.         DC.L    Config_QuitText,0
  3230.         DC.W    GD_Config_Quit            ; Quit
  3231.         DC.L    PLACETEXT_IN,0,0
  3232.  
  3233.         DC.W    156,9,65,17
  3234.         DC.L    Config_GetText,0
  3235.         DC.W    GD_Config_Get            ; Get
  3236.         DC.L    PLACETEXT_IN,0,0
  3237.  
  3238.         DC.W    224,9,65,17
  3239.         DC.L    Config_AboutText,0
  3240.         DC.W    GD_Config_About            ; About
  3241.         DC.L    PLACETEXT_IN,0,0
  3242.  
  3243. AboutNGads:    DC.W    85,167,181,23
  3244.         DC.L    InterText,0
  3245.         DC.W    GD_Inter
  3246.         DC.L    PLACETEXT_IN,0,0
  3247.  
  3248. PubScreenName:        dc.l    WBName
  3249.  
  3250.  
  3251. WorkingWindowTags:
  3252.     WorkingL:
  3253.         DC.L    WA_Left,0
  3254.     WorkingT:
  3255.         DC.L    WA_Top,0
  3256.     WorkingW:
  3257.         DC.L    WA_Width,0
  3258.     WorkingH:
  3259.         DC.L    WA_Height,0
  3260.         DC.L    WA_IDCMP,BUTTONIDCMP!TEXTIDCMP!IDCMP_REFRESHWINDOW
  3261.         DC.L    WA_Flags,WFLG_DRAGBAR!WFLG_DEPTHGADGET!WFLG_SMART_REFRESH
  3262.     WorkingWG:
  3263.         DC.L    WA_Gadgets,0
  3264.         DC.L    WA_Title,WorkingWTitle
  3265.         DC.L    WA_AutoAdjust,1
  3266.         DC.L    TAG_DONE
  3267.  
  3268. ConfigWindowTags:
  3269.     ConfigL:
  3270.         DC.L    WA_Left,0
  3271.     ConfigT:
  3272.         DC.L    WA_Top,0
  3273.     ConfigW:
  3274.         DC.L    WA_Width,0
  3275.     ConfigH:
  3276.         DC.L    WA_Height,0
  3277.         DC.L    WA_IDCMP,CHECKBOXIDCMP!CYCLEIDCMP!BUTTONIDCMP!IDCMP_GADGETDOWN!IDCMP_REFRESHWINDOW
  3278.         DC.L    WA_Flags,WFLG_DRAGBAR!WFLG_DEPTHGADGET!WFLG_SMART_REFRESH!WFLG_ACTIVATE
  3279.     ConfigWG:
  3280.         DC.L    WA_Gadgets,0
  3281.         DC.L    WA_Title,ConfigWTitle
  3282.         DC.L    WA_AutoAdjust,1
  3283.         DC.L    TAG_DONE
  3284.  
  3285. AboutWindowTags:
  3286.     AboutL:
  3287.         DC.L    WA_Left,0
  3288.     AboutT:
  3289.         DC.L    WA_Top,0
  3290.     AboutW:
  3291.         DC.L    WA_Width,0
  3292.     AboutH:
  3293.         DC.L    WA_Height,0
  3294.         DC.L    WA_IDCMP,BUTTONIDCMP!IDCMP_REFRESHWINDOW
  3295.         DC.L    WA_Flags,WFLG_DRAGBAR!WFLG_DEPTHGADGET!WFLG_SMART_REFRESH!WFLG_ACTIVATE
  3296.     AboutWG:
  3297.         DC.L    WA_Gadgets,0
  3298.         DC.L    WA_Title,AboutWTitle
  3299.         DC.L    WA_AutoAdjust,1
  3300.         DC.L    TAG_DONE
  3301.  
  3302. WorkingGTags:
  3303.         DC.L    TAG_DONE        ; Crunch
  3304.         DC.L    TAG_DONE        ; Decrunch
  3305.         DC.L    TAG_DONE        ; Do Nothing
  3306.         DC.L    GA_Disabled,1
  3307.         DC.L    TAG_DONE        ; Skip File
  3308.         DC.L    GA_Disabled,1
  3309.         DC.L    TAG_DONE        ; Stop All !
  3310.         DC.L    GTTX_Text,Working_WaitingT
  3311.         DC.L    GTTX_Border,1
  3312.         DC.L    TAG_DONE        ; Status
  3313.         DC.L    GTTX_Border,1
  3314.         DC.L    TAG_DONE        ; Name
  3315.         DC.L    GTNM_Number,0
  3316.         DC.L    GTNM_Border,1
  3317.         DC.L    TAG_DONE        ; Source
  3318.         DC.L    GTNM_Number,0
  3319.         DC.L    GTNM_Border,1
  3320.         DC.L    TAG_DONE        ; Dest
  3321.  
  3322. ConfigGTags:    DC.L    GTTX_Text
  3323.     CGT_TEXT:            ; APTR sur le Text
  3324.         dc.l    0
  3325.         DC.L    GTTX_CopyText,1
  3326.         DC.L    GTTX_Border,1
  3327.         DC.L    TAG_DONE
  3328.         DC.L    GTCB_Checked
  3329.         dc.b    0,0,0
  3330.     CGT_Check:            ; Etat du CHECKBOX:  1 = Checked
  3331.         dc.b    1
  3332.         DC.L    TAG_DONE
  3333.         DC.L    GTCY_Labels,Config_EffLabels
  3334.         DC.L    GTCY_Active
  3335.         dc.b    0,0,0
  3336.     CGT_Efficiency:            ; Etat d' Efficiency:  0, 1, 2, 3, 4 ; Fast, Mediocre, Good, Very Good, Best
  3337.         dc.b    4
  3338.         DC.L    TAG_DONE
  3339.         DC.L    GTCY_Labels,Config_BufLabels
  3340.         DC.L    GTCY_Active
  3341.         dc.b    0,0,0
  3342.     CGT_Buffer:            ; Etat de Decrunch:  0, 1, 2 ; Small. Medium. Large 
  3343.         dc.b    2
  3344.         DC.L    TAG_DONE
  3345.         DC.L    GTCY_Labels,Config_DecrEffLabels
  3346.         DC.L    GTCY_Active
  3347.         dc.b    0,0,0
  3348.     CGT_Effect:            ; Etat d' Effect: 0, 1, 2, 3, 4 ; Color 0, Color 1, Pointer, Scroll, « None »
  3349.         dc.b    4
  3350.         DC.L    TAG_DONE
  3351.         DC.L    TAG_DONE
  3352.         DC.L    TAG_DONE
  3353.         DC.L    TAG_DONE
  3354.         DC.L    TAG_DONE
  3355.         DC.L    TAG_DONE
  3356.         DC.L    TAG_DONE
  3357.  
  3358. AboutGTags:    DC.L    TAG_DONE
  3359.  
  3360. GAM_WorkingGad0Attrs:
  3361. GAM_WorkingGad1Attrs:
  3362. GAM_WorkingGad2Attrs:
  3363.         dc.l    Ga_Disabled,1
  3364.         dc.l    Tag_Done
  3365. GAM_WorkingGad3Attrs:
  3366. GAM_WorkingGad4Attrs:
  3367.         dc.l    Ga_Disabled,0
  3368.         dc.l    Tag_Done
  3369.  
  3370. WriteTextTags:
  3371.         dc.l    GTTX_Text
  3372.     WTT_Text:
  3373.         dc.l    0
  3374.         dc.l    Tag_Done
  3375.  
  3376. WriteNumberTags:
  3377.         dc.l    GTNM_Number
  3378.     WNT_Number:
  3379.         dc.l    0
  3380.         dc.l    Tag_Done
  3381.  
  3382. Config_AslPTags:
  3383.         dc.l    ASL_Hail,Config_AslPTagsWndText
  3384.         dc.l    ASL_Dir,Config_AslPTagsDirText
  3385.         dc.l    ASL_ExtFlags1,1
  3386.         dc.l    Tag_Done
  3387.  
  3388. Def_EasyStruct:
  3389.         dc.l    20            ;  0  SizeOf
  3390.         dc.l    0            ;  4  Flags
  3391.         dc.l    Def_EasyStruct_Title    ;  8  WindowTitle (APTR)
  3392.         dc.l    0            ; 12  Adresse du texte du requester
  3393.         dc.l    Def_EasyStruct_GadText    ; 16 Adresse du texte des gadgets
  3394.  
  3395. NormalBevelbox:    DC.L    GT_VisualInfo,0,TAG_DONE
  3396. InverseBevelBox:DC.L    GT_VisualInfo,0,GTBB_Recessed,1,TAG_DONE
  3397.  
  3398. AboutText0:    DC.B    2,0
  3399.         DC.B    0
  3400.         DC.B    0
  3401.         DC.W    175,25
  3402.         DC.L    0
  3403.         DC.L    About_IText0
  3404.         DC.L    0
  3405.  
  3406. AboutText1:    DC.B    2,0
  3407.         DC.B    0
  3408.         DC.B    0
  3409.         DC.W    175,41
  3410.         DC.L    0
  3411.         DC.L    About_IText1
  3412.         DC.L    0
  3413.  
  3414. AboutText2:    DC.B    2,0
  3415.         DC.B    0
  3416.         DC.B    0
  3417.         DC.W    175,70
  3418.         DC.L    0
  3419.         DC.L    About_IText2
  3420.         DC.L    0
  3421.  
  3422. AboutText3:    DC.B    2,0
  3423.         DC.B    0
  3424.         DC.B    0
  3425.         DC.W    175,85
  3426.         DC.L    0
  3427.         DC.L    About_IText3
  3428.         DC.L    0
  3429.  
  3430. AboutText4:    DC.B    2,0
  3431.         DC.B    0
  3432.         DC.B    0
  3433.         DC.W    175,113
  3434.         DC.L    0
  3435.         DC.L    About_IText4
  3436.         DC.L    0
  3437.  
  3438. AboutText5:    DC.B    2,0
  3439.         DC.B    0
  3440.         DC.B    0
  3441.         DC.W    175,137
  3442.         DC.L    0
  3443.         DC.L    About_IText5
  3444.         DC.L    0
  3445.  
  3446. Config_EffLabels:
  3447.         DC.L    Config_EffLab0
  3448.         DC.L    Config_EffLab1
  3449.         DC.L    Config_EffLab2
  3450.         DC.L    Config_EffLab3
  3451.         DC.L    Config_EffLab4
  3452.         DC.L    0
  3453.  
  3454. Config_BufLabels:
  3455.         DC.L    Config_BufLab0
  3456.         DC.L    Config_BufLab1
  3457.         DC.L    Config_BufLab2
  3458.         DC.L    0
  3459.  
  3460. Config_DecrEffLabels:
  3461.         DC.L    Config_DecrEffLab0
  3462.         DC.L    Config_DecrEffLab1
  3463.         DC.L    Config_DecrEffLab2
  3464.         DC.L    Config_DecrEffLab3
  3465.         DC.L    Config_DecrEffLab4
  3466.         DC.L    0
  3467.  
  3468. BufNewGad:        dc.w    0,0,0,0
  3469.             dc.l    0,0
  3470.             dc.w    0
  3471.             dc.l    0,0,0
  3472. BufIText:        dc.b    0,0,0,0
  3473.             dc.w    0,0
  3474.             dc.l    0,0,0
  3475. Attr:            dc.l    0
  3476.             dc.w    0
  3477.             dc.b    0,0
  3478. Attr2:            dc.l    0
  3479.             dc.w    0
  3480.             dc.b    0,0
  3481. Left:            dc.w    0
  3482. Top:            dc.w    0
  3483. Width:            dc.w    0
  3484. Height:            dc.w    0
  3485. BevelLeft:        dc.w    0
  3486. BevelTop:        dc.w    0
  3487. BevelWidth:        dc.w    0
  3488. BevelHeight:        dc.w    0
  3489. FontX:            dc.w    0
  3490. FontX2:            dc.w    0
  3491. FontY:            dc.w    0
  3492. FontY2:            dc.w    0
  3493. OffX:            dc.w    0
  3494. OffY:            dc.w    0
  3495. Code:            dc.w    0
  3496. Config_Code:        dc.w    0
  3497.                     ; Si il y a simultanément 2 interfaces,
  3498. WorkingGList:                ; il faut prévoir un tampon par interface
  3499. ConfigGList:        dc.l    0    ; Sinon, le même tampon est utilisé à
  3500. AboutGlist:        dc.l    0    ; chaque fois
  3501. WorkingGadgets:                ; Même remarque que si dessus
  3502. ConfigGadgets:        blk.l    GadgetMaxNumber,0
  3503. AboutGadgets:        blk.l    About_CNT,0
  3504. TD:            dc.l    TAG_DONE
  3505. Stack:            dc.l    0
  3506. Bevelbox_Taglist:    dc.l    0
  3507. IconBase:        dc.l    0
  3508. WorkbenchBase:        dc.l    0
  3509. DosBase:        dc.l    0
  3510. GadtoolsBase:        dc.l    0
  3511. IntuitionBase:        dc.l    0
  3512. ppBase:            dc.l    0
  3513. AslBase:        dc.l    0
  3514. DiskObject:        dc.l    0
  3515. AppIcon:        dc.l    0
  3516. AppMsgPort:        dc.l    0
  3517. Msg:            dc.l    0
  3518. WbMsg:            dc.l    0
  3519. FileCount:        dc.l    0
  3520. FileNumber:        dc.l    0
  3521. CrunchInfo:        dc.l    0
  3522. DirLock:        dc.l    0
  3523. FileLock:        dc.l    0
  3524. FileName:        dc.l    0
  3525. FileNameBuffer:        dc.l    0
  3526. OSF_FileNameBuffer:    dc.l    0
  3527. ConfigBuffer:        dc.l    0
  3528. ConfigBuffer0:        dc.l    0
  3529. ConfigFileName0_FH:    dc.l    0
  3530. ConfigFileName1_FH:    dc.l    0
  3531. DosObject:        dc.l    0
  3532. FileLength:        dc.l    0
  3533. SBuffer:        dc.l    0
  3534. FileHandle:        dc.l    0
  3535. FileBuffer:        dc.l    0
  3536. ppLength:        dc.l    0
  3537. Buffer_:        dc.l    0
  3538. Len_:            dc.l    0
  3539. Message:        dc.l    0
  3540. Gt_IMsg:        dc.l    0
  3541. Scr:            dc.l    0
  3542. VisualInfo:        dc.l    0
  3543. Wnd:            dc.l    0
  3544. WorkingWnd:
  3545. ConfigWnd:        dc.l    0
  3546. AboutWnd:        dc.l    0
  3547. Font:            dc.l    0
  3548. Font2:            dc.l    0
  3549. GetImage:        dc.l    0
  3550. GetClass:        dc.l    0
  3551. AslRequestStruct:    dc.l    0
  3552.  
  3553.  
  3554.  
  3555. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  3556. *  Fin du source.   * * * * * * * * * * * * * * * * * * * * * * * * * * *
  3557. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  3558.  
  3559.